如何知道python中CSV文件行的字节位置?

Mak*_*cha 6 python csv file

我正在使用巨大的CSV文件(20-25Mln行),并且由于很多原因不想将它们分成更小的部分.

我的脚本使用csv模块逐行读取文件.我现在需要一个行的位置(字节数),它将在下一次迭代(或刚刚被读取)中读取.

我试过了

>>> import csv
>>> f = open("uscompany.csv","rU")
>>> reader = csv.reader(f)
>>> reader.next()
....
>>> f.tell()
8230
Run Code Online (Sandbox Code Playgroud)

但似乎csv模块按块读取文件.因为当我继续迭代时,我得到相同的位置

>>> reader.next()
....
>>> f.tell()
8230
Run Code Online (Sandbox Code Playgroud)

有什么建议?请指教.

Joh*_*n Y 7

如果通过"字节位置"表示字节位置就像您已将文件作为普通文本文件一样读取,那么我的建议就是这样做.逐行读入文件作为文本,并获取该行内的位置.您仍然可以使用该csv模块逐行解析CSV数据:

for line in myfile:
  row = csv.reader([line]).next()
Run Code Online (Sandbox Code Playgroud)

我认为CSV读取器不能提供这种字节位置是非常好的设计,因为它在CSV上下文中确实没有多大意义.毕竟,"data"并且data是完全一样的四个字节的数据就CSV而言,但d可能是第2个字节或取决于是否使用了可选的围绕引号的第一个字节.


小智 6

简短的回答:不可能.csvreader API无法使用字节位置