【问题标题】:How to import csv files in Python containing badly formatted quote marks?如何在 Python 中导入包含格式错误的引号的 csv 文件?
【发布时间】:2021-11-30 17:23:15
【问题描述】:

我正在尝试加载以下 test.csv 文件:

R1C1    R1C2    R1C3
R2C1    R2C2    R2C3
R3C1    "R3C2   R3C3
R4C1    R4C2    R4C3

...使用这个 Python 脚本:

import csv


 with open("test.csv") as f:
      for row in csv.reader(f, delimiter='\t'):
          print(row)

我得到的结果如下:

['R1C1', 'R1C2', 'R1C3']
['R2C1', 'R2C2', 'R2C3']
['R3C1', 'R3C2\tR3C3\nR4C1\tR4C2\tR4C3\n']

原来当Python找到首字符为引号且没有右引号的字段时,会将以下所有内容作为同一个字段的一部分。

我的问题:正确读取文件中所有行的最佳方法是什么?请考虑我使用的是 Python 3.8.5,脚本应该能够读取大文件(2gb 或更多),因此还应考虑内存使用和性能问题。

谢谢!

【问题讨论】:

    标签: python csv import


    【解决方案1】:

    老实说,如果您要处理这么多数据,最好先进去清理一下。如果可能的话,首先修复任何产生不良数据的过程。

    我还没有测试过大文件,但你可以在阅读行时替换 " 字符,假设它们永远不会是有效字符:

    import csv
    
    
    with open("test.csv") as f:
        line_generator = (line.replace('"', '') for line in f)
        for row in csv.reader(line_generator, delimiter='\t'):
            print(row)
    

    输出:

    ['R1C1', 'R1C2', 'R1C3']
    ['R2C1', 'R2C2', 'R2C3']
    ['R3C1', 'R3C2', 'R3C3']
    ['R4C1', 'R4C2', 'R4C3']
    

    【讨论】:

    • @Borgesj 我的回答对你有帮助吗?
    • 您的提示很有帮助!谢谢!我实际上必须解决这个替换“由\\”的问题,并且在csv.reader方法上我使用了escapechar ='\\'。 line_generator = (line.replace('"', '\\"') for line in f) row_reader = csv.reader(line_generator, delimiter='\t', escapechar='\\') 我更喜欢保留引号不操纵数据,脚本运行良好!
    • 很高兴听到这个消息!如果您认为我的回答是对您的问题的满意解决方案,可能使未来的读者受益,请考虑用复选标记“接受”我的回答。这样,问题将从未回答队列中删除。否则,请随时发布您自己对问题的答案并接受它!
    猜你喜欢
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2015-02-17
    • 2020-06-29
    相关资源
    最近更新 更多