You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:54:03