如何使用Python将txt日志文件转换为指定格式带表头CSV文件
TXT日志转指定格式CSV实现方法
处理逻辑说明
- 日志文件包含三类内容:带接收时间的批次标记行、
$开头的有效数据行、无内容空行 - 每段时间标记行对应的时间,属于其下方所有后续数据行,直到遇到下一个时间标记行
- 有效数据行的字段以多空格作为分隔符,最后一个字段末尾带
*标记,需要单独清理 - 最终输出CSV第一行写入自定义表头,后续按顺序写入处理后的字段即可
快速实现方案(Python脚本,适配大数据量)
直接运行以下脚本即可,仅需要修改脚本里的输入文件路径、输出文件路径、表头字段三个部分:
import csv import re # -------------------------- 按需修改以下配置 -------------------------- INPUT_TXT_PATH = "your_log.txt" # 替换成你的txt日志文件实际路径 OUTPUT_CSV_PATH = "result.csv" # 替换成你要输出的csv文件保存路径 # 按目标CSV的列顺序填写表头,第一个字段为接收时间,后续字段和数据行拆分顺序一一对应 CSV_HEADER = [ "receive_time", "flag", "seq", "encrypt_type", "protocol_ver", "data_type", "signal_level", "imsi", "device_id", "status1", "status2", "status3", "status4", "status5", "status6", "status7", "status8", "status9", "status10", "status11", "status12", "status13", "operator", "param1", "param2", "param3", "param4", "param5", "direction", "ext1", "ext2", "ext3", "ext4", "ext5", "ext6", "ext7", "ext8", "data_seq", "check_code" ] # -------------------------------------------------------------------- current_receive_time = "" with open(INPUT_TXT_PATH, "r", encoding="utf-8") as infile, \ open(OUTPUT_CSV_PATH, "w", encoding="utf-8-sig", newline="") as outfile: writer = csv.writer(outfile) writer.writerow(CSV_HEADER) # 写入表头 for line in infile: line = line.strip() if not line: continue # 跳过空行 # 匹配时间标记行,提取当前批次时间 if line.startswith("New Data Received at :"): current_receive_time = line.split(":", 1)[1].strip() continue # 匹配有效数据行,处理后写入 if line.startswith("$"): # 按连续空白字符拆分字段,兼容多空格、制表符分隔场景 fields = re.split(r"\s+", line) # 清理最后一个字段末尾的*标记 fields[-1] = fields[-1].rstrip("*") # 拼接时间字段组成完整行写入 row = [current_receive_time] + fields writer.writerow(row)
说明:脚本默认使用
utf-8-sig编码输出CSV,直接用Excel打开不会出现中文乱码;如果字段名和你的目标CSV要求不一致,直接修改CSV_HEADER里的列名即可,不需要改动处理逻辑。
小数据量临时处理方案(Excel操作)
如果只有少量日志需要转换,无需写代码也能实现:
- 新建空白Excel,点击「数据」选项卡-「自文本/CSV」,选择目标txt日志文件
- 导入时分隔符选择「空格」,勾选「连续分隔符视为单个」,完成数据加载
- 筛选删除空行、无效行,给同一批次的数据批量填充对应的接收时间
- 新增表头行,最后点击「另存为」选择CSV格式导出即可。
内容的提问来源于stack exchange,提问作者Pradip Waghela
相关产品推荐
相关产品推荐

