【发布时间】:2012-08-20 00:44:40
【问题描述】:
我正在处理巨大的 CSV 文件(20-2500 万行),出于很多原因,我不想将它们拆分成更小的部分。
我的脚本使用 csv 模块逐行读取文件。我现在需要在下一次迭代(或刚刚读取)时读取的行的位置(字节数)。
我试过了
>>> import csv
>>> f = open("uscompany.csv","rU")
>>> reader = csv.reader(f)
>>> reader.next()
....
>>> f.tell()
8230
但似乎 csv 模块按块读取文件。因为当我继续迭代时,我得到了相同的位置
>>> reader.next()
....
>>> f.tell()
8230
有什么建议吗?请指教。
【问题讨论】:
-
我怀疑
csv不可能做到这一点。根据文件的结构,您可以只在分隔符上使用str.split并使用常规文件对象... -
@mgilson 不幸的是,我不能使用 split,因为项目包含标准 CSV 分隔符:引号、换行符等。