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('全部完成!')
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值