'''样例数据 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)