如何用Python Pandas解析嵌套[key=value]格式的传感器日志数据
解析嵌套[key=value]格式传感器日志的Python实现
针对你的无分隔符嵌套格式日志(如[Priority=0][X=776517049]),可以通过正则提取+字典转换的方式替换原代码逻辑,实现按列解析。以下是修改后的完整代码:
import pandas as pd import re def parse_log_line(line): # 提取所有[]包裹的key=value内容 key_value_pairs = re.findall(r'\[(.*?)\]', line.strip()) # 转换为字典 record = {} for pair in key_value_pairs: k, v = pair.split('=', 1) # 用split('=',1)避免value里包含=符号的情况 record[k] = v return record # 读取日志文件 records = [] with open('/path/to/your_log.txt', 'r') as infile: for line in infile: line = line.strip() if not line: continue # 跳过空行 records.append(parse_log_line(line)) # 转换为DataFrame,自动补全缺失字段为NaN df = pd.DataFrame(records) # 若需要像原代码一样用前两个字段拼接作为行索引(比如Time和Priority),取消下面两行注释: # df['row_name'] = df.iloc[:, 0] + ' ' + df.iloc[:, 1] # df.set_index('row_name', inplace=True) # 输出并保存结果 print(df) df.to_csv('/path/to/output.csv', index=False)
关键改动说明
- 正则提取:用
re.findall(r'\[(.*?)\]', line)精准提取每个[]内的key=value内容,替代原代码的逗号分割逻辑。 - 稳健分割:用
split('=', 1)分割键值对,避免值本身包含=符号导致的解析错误。 - 自动补全缺失字段:利用Pandas的
DataFrame.from_records自动为每行缺失的字段填充NaN,无需手动计算最大长度补值,简化代码逻辑。
适配日志结构调整
如果你的日志每行第一个字段是时间(比如[Time=2024-05-20 12:00:00]),可以直接将其设为行索引:
df.set_index('Time', inplace=True)
内容的提问来源于stack exchange,提问作者aparna podili
相关产品推荐
相关产品推荐

