如何将字典格式TXT性能日志转换为Pandas DataFrame并跳过无关内容
嘿,作为刚上手NumPy和Pandas的新手,你的需求完全可以实现!不过得搭配一点点Python标准库的辅助——不需要额外装第三方工具,用自带的re(正则表达式)和json库就够了,NumPy在这里其实不是必须的(Pandas底层会用到它,但咱们写代码时不用直接调用)。
下面是一步步实现的方案,代码注释很详细,你跟着走就行:
步骤1:读取日志文件
先把txt里的内容读出来,用Python内置的文件操作就很简单:
with open('你的日志文件名.txt', 'r', encoding='utf-8') as f: log_text = f.read()
步骤2:提取大括号内的JSON内容
原始日志里每条有效数据都是被{}包裹的JSON串,前面的时间和Info是咱们不需要的。用正则表达式可以精准提取所有{...}的部分:
import re # 正则匹配所有大括号包裹的内容,re.DOTALL处理可能的跨行JSON json_strings = re.findall(r'\{.*?\}', log_text, flags=re.DOTALL)
这里.*?是非贪婪匹配,能保证每个{}都是独立的条目,不会把多个日志内容连在一起。
步骤3:转成Pandas DataFrame
有两种方法可以把提取到的JSON串转成DataFrame,选哪种都可以:
方法一:快速批量转换(适合日志格式规整的情况)
把所有JSON串拼成一个JSON数组,直接用Pandas的read_json解析:
import pandas as pd # 把单个JSON串拼接成JSON数组格式 json_array = '[' + ','.join(json_strings) + ']' df = pd.read_json(json_array)
方法二:逐个解析(适合排查错误,比如某条JSON格式有问题)
用json.loads逐个解析每个JSON串,再转成DataFrame,还能加错误捕获:
import json data_list = [] for js_str in json_strings: try: # 把JSON字符串转成Python字典 data_dict = json.loads(js_str) data_list.append(data_dict) except json.JSONDecodeError as e: # 如果某条JSON格式错了,会打印出来方便排查 print(f"解析失败的JSON内容: {js_str}") print(f"错误原因: {e}") # 把字典列表转成DataFrame df = pd.DataFrame(data_list)
最终结果
运行完上面的代码,df就是你想要的结构啦,直接打印或者用df.head()查看:
message level logType timeStamp 0 Killing processes... Information User 2020-10-19T10:07:49.1386035+02:00 1 Opening applications... Information User 2020-10-19T10:07:49.4092373+02:00
总结一下
- 只用Pandas+Python标准库(
re、json)就足够,不需要额外工具 - NumPy在这里没直接用到,不过Pandas内部会依赖它处理数据
- 如果日志格式有变化(比如JSON跨行、前缀格式不同),调整正则表达式就行
内容的提问来源于stack exchange,提问作者miatochai
相关产品推荐
相关产品推荐

