安评波处理

发展一下的用处。用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')

你可能感兴趣的:(安评波处理)