PPG_SpO2/process_spo2_hr.py

52 lines
1.7 KiB
Python

'''样例数据
red:9188561;ied:10745056;accX:209;accY:-438;accZ:-169
red:9185136;ied:10744763;accX:209;accY:-438;accZ:-171
red:9182875;ied:10744312;accX:209;accY:-438;accZ:-171
red:9181788;ied:10744212;accX:209;accY:-441;accZ:-163
red:9180729;ied:10744341;accX:209;accY:-441;accZ:-163
red:9179405;ied:10742269;accX:212;accY:-440;accZ:-172
red:9178563;ied:10741796;accX:212;accY:-440;accZ:-172
red:9178557;ied:10742843;accX:209;accY:-440;accZ:-166
red:9178185;ied:10742777;accX:209;accY:-440;accZ:-166
red:9177053;ied:10737766;accX:210;accY:-440;accZ:-166
'''
import numpy as np
import pandas as pd
from pathlib import Path
def parse_dat_line(line: str) -> dict:
"""
解析一行 .dat 文件内容,返回一个字典
例如输入:
red:9188561;ied:10745056;accX:209;accY:-438;accZ:-169
"""
data = {}
parts = line.strip().split(';')
for part in parts:
if len(part.strip()) == 0:
continue
key, value = part.split(':', 1)
data[key.strip()] = int(value.strip())
return data
def parse_dat_file(file_path) -> pd.DataFrame:
"""
读取整个 .dat 文件并返回 pandas DataFrame
:param file_path:
:return:
"""
records = []
with open(file_path, 'r', encoding='utf-8') as f:
for line in f:
parsed_line = parse_dat_line(line)
records.append(parsed_line)
df = pd.DataFrame(records)
return df
if __name__ == '__main__':
# file_path = './data/spo2hr[42-A3-C5-2F-F7-32]2025.11.17_17.01.13.dat'
file_path = './data/spo2hr[42-A3-C5-2F-F7-32]2025.11.17_17.12.15.dat'
file_path = Path(file_path)
df = parse_dat_file(file_path)
df.to_csv(file_path.with_suffix('.csv'), index=False)