如何用Pandas读取文本文件的键值对并写入CSV?
日志文件解析为CSV的解决方案
针对你提供的日志文件解析需求,这里给出完整的Python实现代码,解决了重复字段、格式不统一等问题:
完整代码
import pandas as pd import re # 定义固定的前四个字段 fixed_fields = ['Name', 'Date', 'Time', 'Activity'] data = [] with open('Input.log', 'r') as f: for line in f: line = line.strip() # 处理重复的Activity字段(如"Call Activity: Search") line = re.sub(r'Activity: [^|]+?Activity:', 'Activity:', line) # 分割字段并去除多余空格 parts = [part.strip() for part in line.split('|')] row = {field: '' for field in fixed_fields} extra_fields = {} for part in parts: if ': ' in part: key, value = part.split(': ', 1) # 补全Time的分钟为两位(如16:0 → 16:00) if key == 'Time': hour, minute = value.split(':') value = f"{hour}:{minute.ljust(2, '0')}" if key in fixed_fields: row[key] = value else: extra_fields[key] = value row.update(extra_fields) data.append(row) # 转换为DataFrame并调整列顺序 df = pd.DataFrame(data) all_columns = fixed_fields + [col for col in df.columns if col not in fixed_fields] df = df[all_columns] # 写入CSV文件 df.to_csv('output.csv', index=False) # 打印预览 print(df.to_string(index=False))
关键处理逻辑
- 重复Activity字段修复:用正则表达式替换掉多余的前置Activity内容,确保只保留最后一个Activity值
- Time格式统一:将一位数的分钟补全为两位(如
16:0转为16:00),匹配标准时间格式 - 动态字段兼容:自动识别日志中除固定四列外的所有额外字段,缺失字段自动填充为空值
- 列顺序控制:保证固定字段始终排在前列,其余字段按首次出现顺序排列
运行代码后,会生成符合要求的output.csv文件,内容结构与你给出的期望输出一致。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

