Python读取文件字典内容生成Pandas DataFrame的问题求解
问题分析
原有代码存在3个核心问题:
- 读取到的每行内容是字符串格式,并没有转换为Python字典对象,直接访问
line[0]只会取到字符串的第一个字符 - 没有对每行前后的多余空格做处理,会导致集合差集计算匹配错误
- 逐行创建DataFrame的逻辑错误,应该先把所有行转换为字典存入列表,再统一生成DataFrame
修正后代码
import pandas as pd import ast def compare(File1, File2): # 读取两个文件的行,去除首尾空白后去重,同时过滤空行 with open(File1, 'r') as f: d = {line.strip() for line in f if line.strip()} with open(File2, 'r') as f: e = {line.strip() for line in f if line.strip()} # 处理差集的行,统一转换为字典 dict_list = [] for line_str in e - d: # 安全地把字典字符串转为真实的Python字典 row_dict = ast.literal_eval(line_str) dict_list.append(row_dict) # 生成DataFrame,按COLNO升序排序对齐预期输出 df = pd.DataFrame(dict_list).sort_values(by='COLNO', ignore_index=True) # 输出结果到文件,可自定义分隔符 df.to_csv('pandastry1.txt', sep='\t', index=False) # 打印验证结果 print(df) compare('OPd.txt','OPER.txt')
代码说明
- 用
ast.literal_eval替代普通eval,安全地将符合Python字典格式的字符串转为真实字典对象,避免代码注入风险 - 读取行时先调用
strip()去除前后多余空白,同时过滤空行,避免差集计算出错 - 所有行处理完成后统一生成DataFrame,可通过
sort_values调整排序规则,和你预期的输出顺序对齐 - 直接用DataFrame内置的
to_csv方法输出到文件,可通过sep参数自定义列分隔符
内容的提问来源于stack exchange,提问作者rose
相关产品推荐
相关产品推荐

