美文网首页
安评波处理

安评波处理

作者: Muggle01 | 来源:发表于2018-08-24 14:31 被阅读0次

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

    相关文章

      网友评论

          本文标题:安评波处理

          本文链接:https://www.haomeiwen.com/subject/giquiftx.html