读取文件中的前N行而不打开它(Python)

时间:2017-02-23 08:39:49

标签: python text tail head

我有一个Python脚本需要读取一个非常大的文本文件的一部分,从第N行开始到N + X结束。 我不想使用“open('file')”,因为这会将整个内容写入内存,这将花费太长时间,并浪费太多内存。 我的脚本在Unix机器上运行,所以我目前使用本机的head和tail函数,即:

section = subprocess.check_output('tail -n-N {filePath} | head -n X')

但是感觉必须有一种更聪明的方式来做这件事。 有没有办法在Python中获取文本文件的行N到N + X而不打开整个文件?

谢谢!

2 个答案:

答案 0 :(得分:3)

您的问题的答案位于:How to read large file, line by line in python

with open(...) as f:
    for line in f:
        <do something with line>
  

with语句处理打开和关闭文件,包括if   内部块中引发异常。 f中的for line对待   文件对象f作为可迭代的,它自动使用缓冲的IO   和内存管理,所以你不必担心大文件。

答案 1 :(得分:3)

Python的islice()适用于此:

from itertools import islice

N = 2
X = 5

with open('large_file.txt') as f_input:
    for row in islice(f_input, N-1, N+X):
        print row.strip()

这会跳过所有初始行,只返回您感兴趣的行。