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

时间:2012-08-24 12:43:31

标签: python file csv

我使用大量的CSV文件(20-25Mnn行)进行操作,并且由于很多原因,我们不想将它们分成小块。

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

我试过

>>> import csv
>>> f = open("uscompany.csv","rU")
>>> reader = csv.reader(f)
>>> reader.next()
....
>>> f.tell()
8230

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

>>> reader.next()
....
>>> f.tell()
8230

有什么建议吗?请指教。

3 个答案:

答案 0 :(得分:7)

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

for line in myfile:
  row = csv.reader([line]).next()

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

答案 1 :(得分:6)

简短回答:不可能。字节位置不能通过csvreader API

获得

答案 2 :(得分:0)

csv模块确实确实使用预读缓冲区读入了块,如对此帖子的回复中所建议的:

file.tell() inconsistency

我对您也有类似的需求,并将我的解决方案推广到可能做类似事情的其他人:

https://github.com/loisaidasam/csv-position-reader

希望有帮助!