我正在尝试加载以下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', 'R3C2tR3C3nR4C1tR4C2tR4C3n']
事实证明,当Python发现一个字段的第一个字符是引号并且没有结束引号时,它将包括以下所有内容作为同一字段的一部分。
我的问题:正确读取文件中所有行的最佳方法是什么?请考虑我使用Python 3.8.5,脚本应该能够读取大文件(2gb或更多),所以内存使用和性能问题也应该考虑。
老实说,如果要处理这么多数据,最好先进行清理。如果可能的话,首先修复产生坏数据的进程。
我还没有测试过一个大文件,但你可能只是能够替换"
字符,因为你读取行,假设从来没有一种情况下,他们是有效的字符:
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']