发展一下简书的用处。用python编了一个安评波处理的小程序,将需要画图的安评波放入wave文件夹,运行程序,将在wave文件夹下得到png格式的地震动时程图,wave_xls下生成SAP2000时程导入文件。
对安评报告给的安评波:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os
import sys
import numpy
import xlwt
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
path_0=os.path.abspath('.')
wave_path = path_0 + '\\' + 'wave'
fig_path = path_0 + '\\' + 'figure'
wave_xls_path = path_0 + '\\' + 'wave_xls'
path_1=wave_path
path_2=wave_path+'\\'
sys.path.append(path_2)
#*****************修改文件后缀名为txt*******************
files = os.listdir(path_1)
n_file = len(files)
for filename in files:
portion = os.path.splitext(filename)
# 如果后缀是.txt
if portion[1] == ".DAT" or portion[1] == ".dat":
# 重新组合文件名和后缀名
newname = portion[0] + ".txt"
filenamedir=path_2 +filename
newnamedir=path_2+newname
# os.rename(filename,newname)
os.rename(filenamedir,newnamedir)
#**********************************************************
i=0
new_files = os.listdir(path_1)
wave_output = xlwt.Workbook(encoding = 'utf-8')
wave_data = wave_output.add_sheet('wave_data')
for new_filename in new_files:
#*****************逐个读取时程数据t*******************
new_filename_absloute=path_2 + new_filename
timehistory = open(new_filename_absloute)
timehistory_lines = timehistory.readlines()
timehistory_list = []
j = 0
for line in timehistory_lines:
singal_list = line.strip('\n').split()
if len(singal_list) == 2:
num_dot = int(singal_list[0])
time_step = float(singal_list[1])
else:
for acc in singal_list:
acc_num = float(acc)/100
timehistory_list.append(acc_num)
wave_data.write(i,0,new_filename.split('.')[0])
wave_data.write(i,1,time_step*j)
wave_data.write(i,2,acc_num)
i += 1
j += 1
time_list = [step*time_step for step in range(0,num_dot)]
timehistory.close()
#******************************************************
#画出地震动时程
#*********************定义画图参数*************************
fig = plt.figure(figsize=(24,6), dpi=96, facecolor="white")
axes = plt.subplot(111)
axes.cla()#清空坐标轴内的所有内容
#指定图形的字体
font = {'family' : 'serif',
'color' : 'black',
'weight' : 'normal',
'size' : 18,
}
#**********************************************************
plt.plot(time_list,timehistory_list,c='black',linewidth=1)
plt.title(new_filename.split('.')[0],font)
#*********************设置坐标轴***************************
ax=plt.gca()
ax.set_xlabel("time(s)",font)
ax.set_xlim(0, time_step*num_dot)
ax.set_ylabel("acceleration(m/s2)",font)
#**********************************************************
#*********************设置坐标轴标签*************************
xmajorLocator = MultipleLocator(10) #将x主刻度标签设置为20的倍数
xmajorFormatter = FormatStrFormatter('%1.1f') #设置x轴标签文本的格式
xminorLocator = MultipleLocator(5) #将x轴次刻度标签设置为5的倍数
ymajorLocator = MultipleLocator(1) #将y轴主刻度标签设置为0.5的倍数
ymajorFormatter = FormatStrFormatter('%1.1f') #设置y轴标签文本的格式
yminorLocator = MultipleLocator(0.5) #将此y轴次刻度标签设置为0.1的倍数
#设置主刻度标签的位置,标签文本的格式
ax.xaxis.set_major_locator(xmajorLocator)
ax.xaxis.set_major_formatter(xmajorFormatter)
ax.yaxis.set_major_locator(ymajorLocator)
ax.yaxis.set_major_formatter(ymajorFormatter)
#显示次刻度标签的位置,没有标签文本
ax.xaxis.set_minor_locator(xminorLocator)
ax.yaxis.set_minor_locator(yminorLocator)
#**********************************************************
#*********************设置图片网格*************************
ax.xaxis.grid(False, which='major') #x坐标轴的网格使用主刻度
ax.yaxis.grid(False, which='minor') #y坐标轴的网格使用次刻度
#**********************************************************
#***********设置坐标刻度值的大小以及刻度值的字体***********
ax.tick_params(labelsize=16)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
#**********************************************************
plt.savefig(fig_path + '\\' + new_filename.split('.')[0] + '.png',bbox_inches='tight')
# plt.show()
wave_output.save(wave_xls_path + '\\' + 'wave_output.xls')
对涉及反应谱拟合的人工波:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os
import sys
import numpy
import xlwt
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
path_0=os.path.abspath('.')
wave_path = path_0 + '\\' + 'wave'
fig_path = path_0 + '\\' + 'figure'
wave_xls_path = path_0 + '\\' + 'wave_xls'
path_1=wave_path
path_2=wave_path+'\\'
sys.path.append(path_2)
#*****************修改文件后缀名为txt*******************
files = os.listdir(path_1)
n_file = len(files)
for filename in files:
portion = os.path.splitext(filename)
# 如果后缀是.txt
if portion[1] == ".DAT" or portion[1] == ".dat":
# 重新组合文件名和后缀名
newname = portion[0] + ".txt"
filenamedir=path_2 +filename
newnamedir=path_2+newname
# os.rename(filename,newname)
os.rename(filenamedir,newnamedir)
#**********************************************************
i=0
new_files = os.listdir(path_1)
wave_output = xlwt.Workbook(encoding = 'utf-8')
wave_data = wave_output.add_sheet('wave_data')
for new_filename in new_files:
#*****************逐个读取时程数据t*******************
new_filename_absloute=path_2 + new_filename
timehistory = open(new_filename_absloute)
timehistory_lines = timehistory.readlines()
timehistory_list = []
time_list = []
for line in timehistory_lines:
singal_list = line.strip('\n').split()
if len(singal_list) != 2:
pass
else:
timehistory_list.append(float(singal_list[1]))
time_list.append(float(singal_list[0]))
wave_data.write(i,0,new_filename.split('.')[0])
wave_data.write(i,1,singal_list[0])
wave_data.write(i,2,singal_list[1])
i += 1
timehistory.close()
#******************************************************
#画出地震动时程
#*********************定义画图参数*************************
fig = plt.figure(figsize=(24,6), dpi=96, facecolor="white")
axes = plt.subplot(111)
axes.cla()#清空坐标轴内的所有内容
#指定图形的字体
font = {'family' : 'serif',
'color' : 'black',
'weight' : 'normal',
'size' : 18,
}
#**********************************************************
plt.plot(time_list,timehistory_list,c='black',linewidth=1)
plt.title(new_filename.split('.')[0],font)
#*********************设置坐标轴***************************
ax=plt.gca()
ax.set_xlabel("time(s)",font)
ax.set_xlim(0, time_list[-1])
ax.set_ylabel("acceleration(m/s2)",font)
#**********************************************************
#*********************设置坐标轴标签*************************
xmajorLocator = MultipleLocator(10) #将x主刻度标签设置为20的倍数
xmajorFormatter = FormatStrFormatter('%1.1f') #设置x轴标签文本的格式
xminorLocator = MultipleLocator(5) #将x轴次刻度标签设置为5的倍数
ymajorLocator = MultipleLocator(1) #将y轴主刻度标签设置为0.5的倍数
ymajorFormatter = FormatStrFormatter('%1.1f') #设置y轴标签文本的格式
yminorLocator = MultipleLocator(0.5) #将此y轴次刻度标签设置为0.1的倍数
#设置主刻度标签的位置,标签文本的格式
ax.xaxis.set_major_locator(xmajorLocator)
ax.xaxis.set_major_formatter(xmajorFormatter)
ax.yaxis.set_major_locator(ymajorLocator)
ax.yaxis.set_major_formatter(ymajorFormatter)
#显示次刻度标签的位置,没有标签文本
ax.xaxis.set_minor_locator(xminorLocator)
ax.yaxis.set_minor_locator(yminorLocator)
#**********************************************************
#*********************设置图片网格*************************
ax.xaxis.grid(False, which='major') #x坐标轴的网格使用主刻度
ax.yaxis.grid(False, which='minor') #y坐标轴的网格使用次刻度
#**********************************************************
#***********设置坐标刻度值的大小以及刻度值的字体***********
ax.tick_params(labelsize=16)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
#**********************************************************
plt.savefig(fig_path + '\\' + new_filename.split('.')[0] + '.png',bbox_inches='tight')
# plt.show()
wave_output.save(wave_xls_path + '\\' + 'wave_output.xls')
网友评论