安评波处理

发展一下的用处。用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, FormatStrFormatterpath_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 = https://www.it610.com/article/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, FormatStrFormatterpath_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 = https://www.it610.com/article/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')

    推荐阅读