2014-02-13 120 views
4

我需要阅读一个有两百万行的CSV文件。该文件一整天都在增长。在每次处理文件(并将每行压缩成字典)后,我再次启动该过程,除了仅为新行创建字典。Python CSV阅读器从line_num开始

为了达到新的界限,我必须用CSV阅读器遍历每一行,并将行号与我的“最后一行读取”数据进行比较(据我所知)。

有没有办法只是'跳过'到该行号?

回答

2

你不能去特定的行号,除非行的大小是固定的,你知道这个大小。当我说你不能,我的意思是你不能没有加载整个文件在内存中,并由\n字符分裂。

如果CSV有固定线路的大小是这样的:

id,code,quantity 
0001,ABC43,00100 
0002,D2ZAD,00020 
.... 

其中每行具有相同的长度,那么你可以移动到linesize*(linenumber+1),其中linenumber是你想要去的路线。
否则,你需要遍历整个文件,以获得n n行......它存在一个内置的模块,名称linecache但是它可以帮助你:Go to a specific line in Python?

+0

非常感谢您的帮助。今天下午我会尝试linecache。 – 10mjg

+0

不要忘记接受答案,所以你的问题被标记为“已解决”:) –

+0

我有点好奇,一旦我使用linecache到达特定线路时如何继续。 – 10mjg

0

如果我这样做,我认为我会在每次读取之后添加一个标记行 - 在文件再次保存之前,然后我会以字符串形式读取文件,在标记上拆分,转换回列表并将列表提供给进程。