Python如何将文本文件中字符串格式的字典转换为pandas DataFrame
问题解决方法
原有代码错误原因
- 每次循环都单独为单行数据生成DataFrame,没有汇总所有行的数据,最终只能保留最后一行的处理结果,且单字典直接传入
pd.DataFrame.from_dict会默认按键名做列、值做行,单值场景会触发维度不匹配报错 with open语法会在代码块执行结束后自动关闭文件,不需要额外写f.close,且你写的f.close缺少括号,属于方法引用没有实际执行- 直接用
eval()执行字符串存在安全风险,如果日志里被植入恶意代码会直接执行,建议用更安全的ast.literal_eval,它只会解析Python基础数据结构,不会执行任意代码 - 若尝试用
json.loads解析会因为字符串使用单引号不符合JSON规范报错,因此不适合用JSON模块处理当前格式的内容
正确实现代码
import pandas as pd import ast # 初始化空列表存储所有行的字典 data_list = [] with open("c:/file.log", encoding='utf-8') as f: for line in f: # 去掉首尾空白字符(包括换行符) line = line.strip() # 跳过空行避免解析报错 if not line: continue # 字符串转字典 row_dict = ast.literal_eval(line) data_list.append(row_dict) # 直接把字典列表转DataFrame df = pd.DataFrame(data_list) print(type(df)) print(df)
补充说明
如果确认日志内容完全可控无风险,也可以将ast.literal_eval(line)替换为eval(line),但该操作存在安全隐患,不推荐在生产环境使用。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

