python提取peer地震波并进行归一化
大家可以直接导入代码进行提取,在文件路径处修改自己地震波所在的文件夹即可。
导入所需模块
import os
import pandas as pd
import re
创建函数得到地震波数据
# 得到地震波数据
def get_peer_data(filename):
'''
输入文件路径,得到地震波数据,时间间隔和地震点数量
:param filename: 文件路径
:return: 地震波数据(列表), 时间间隔,地震点数量
'''
# 读取文件
peer_file = open(filename, 'r', encoding='utf-8')
# 创建储存地震波的列表
wave_data = []
# 创建储存时间的列表
time_data = []
# 跳过前三行
line = peer_file.readline()
line = peer_file.readline()
line = peer_file.readline()
line = peer_file.readline()
result = re.split(r'\s', line)
# 时间步长读取
for i in range(len(result)):
if result[i] != '':
time_data.append(result[i])
DT = float(time_data[3])
# 读取接下来的数据
while True:
line = peer_file.readline()
# 最后一行停止
if not line:
break
result_1 = re.split(r'\s', line)
for i in range(len(result_1)):
if result_1[i] != '':
wave_data.append(float(result_1[i]))
peer_file.close()
return wave_data, DT, len(wave_data)
创建函数将得到地震波数据归一化并输出
def get_excel(wave_data, DT, NPTS, savepath):
'''
输入上一个函数得到的地震波数据,生成dataframe,进行归一化,并输出excel
:param wave_data: 地震波数据
:param DT: 时间间隔
:param NPTS: 数据点数量
:param savepath: 存储绝对路径
:return:
'''
# 最终储存数据dataframe
end_data = pd.DataFrame()
# 时间列
a = 0
time_list = []
time_list.append(0)
for i in range(NPTS-1):
a = a + DT
time_list.append(a)
# 创建新的index
new_index = list(range(0, NPTS))
# 时间列
data1 = pd.Series(time_list, index = new_index)
end_data['t'] = data1
# 数据列
data2 = pd.Series(wave_data, index = new_index)
end_data['A'] = data2
# 找地震波绝对最大值
num_max = end_data.iloc[:, 1].apply(abs).max()
# print(num_max)
# 归一化
end_data['t_1'] = data1
end_data['归一化A'] = end_data['A'] / num_max
# 输出excel
end_data.to_excel(savepath, index=False)
进行文件遍历并调用函数
file_work_path = r'F:\研究生\研究课题\地震波\抗震地震波\20条\有脉冲'
save_path = r'F:\研究生\研究课题\地震波\抗震地震波\20条\有脉冲-已处理'
i = 0
for filepath, dirname, filenames in os.walk(file_work_path):
for filename in filenames:
# 分离文件名称和后缀,后缀:.AT2
name, suffix = os.path.splitext(filename)
# 判断是否为加速度文件
if suffix == '.AT2':
print(name)
# 生成储存文件名称
save_name = name + '.xlsx'
# 获取存储文件名称绝对路径
abs_savepath = os.path.join(save_path, save_name)
# 获取文件绝对路径
abs_filepath = os.path.join(filepath, filename)
# 函数1
wave_data, DT, NPTS = get_peer_data(abs_filepath)
# 函数2
get_excel(wave_data, DT, NPTS, abs_savepath)
i = i + 1
print("已完成" + str(i))
print('全部完成!')