52 lines
1.7 KiB
Python
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) |