安评波处理
发展一下的用处。用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')
推荐阅读
- Java|Java OpenCV图像处理之SIFT角点检测详解
- 事件处理程序
- Python基础|Python基础 - 练习1
- 我与阳光有氧的相遇(中下)
- 2019-2-26
- 爬虫数据处理HTML转义字符
- 一波三折的周日
- 【江湖风波录】江山美人
- Android|Android BLE蓝牙连接异常处理
- 第五回|第五回 西子湖畔融融风(4)烟波画舫