如何在Python中导入包含格式错误的引号的csv文件?

fkaflof6  于 2023-05-26  发布在  Python
关注(0)|答案(1)|浏览(141)

我正在尝试加载以下测试.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或更多),因此还应该考虑内存使用和性能问题。

ahy6op9u

ahy6op9u1#

老实说,如果你要处理这么多数据,最好先进去清理一下。如果可能的话,首先修复产生错误数据的任何过程。
我还没有测试过一个大文件,但是你可以在读取行时替换"字符,假设它们永远不会是有效字符:

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']

相关问题