2013-03-26 66 views
7

给定一个大文件(数百MB),如何使用Python快速读取文件中特定开始和结束索引之间的内容?如何在Python中读取大文件的特定部分

从本质上讲,我正在寻找做的更有效的方法:

open(filename).read()[start_index:end_index] 

回答

14

您可以seek到文件的文件,然后从那里阅读一定量。 Seek允许您获取文件中的特定偏移量,然后可以将读取限制为该范围内的字节数。

with open(filename) as fin: 
    fin.seek(start_index) 
    data = fin.read(end_index - start_index) 

这只会读取您要查找的数据。

+2

请注意,这只与OP的代码具有单字节编码(如ASCII)或二进制文件的代码相同,因为OP的'start_index'和'end_index'是字符位置,而seek()和read )'与字节位置一起工作。当您使用可变宽度编码的文件时,您可能必须对文件进行解码才能正确编制索引。 – 2013-03-26 18:49:46

+1

这真是一个很好的观点。我非常喜欢ASCII模式:-) – 2013-03-26 18:55:13

+1

另外一点:如果你想读取一个文件的多个连续片段,fin.read(n)会自动将读指针设置为下一个要读取的字节。 – MrMas 2015-06-26 19:50:35

相关问题