在不打开文件的情况下读取文件的前N行(Python)

在不打开文件的情况下读取文件的前N行(Python),python,text,tail,head,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结束。 我不想使用“open('file')”,因为这会将整个内容写入内存,这会花费太长时间,也会浪费太多内存。 我的脚本在Unix机器上运行,因此我目前使用本机的head和tail函数,即:

section = subprocess.check_output('tail -n-N {filePath} | head -n X')
但我觉得一定有更聪明的方法。。 有没有一种方法可以在不打开整个文件的情况下在Python中获取文本文件的N到N+X行


谢谢

您的问题的答案在这里:

打开(…)作为f的
:
对于f中的行:
with语句处理打开和关闭文件,包括 在内部块中引发异常。f treats中的for行 文件对象f作为一个iterable,它自动使用缓冲IO 和内存管理,所以您不必担心大文件


您的问题的答案位于此处:

打开(…)作为f的
:
对于f中的行:
with语句处理打开和关闭文件,包括 在内部块中引发异常。f treats中的for行 文件对象f作为一个iterable,它自动使用缓冲IO 和内存管理,所以您不必担心大文件

Python在这方面做得很好:

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()
这将跳过所有的初始行,只返回您感兴趣的行。

Python很适合这样做:

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()
这会跳过所有的初始行,只返回您感兴趣的行。

“我不想使用“打开('file')”,因为这会将整个内容写入内存,这会花费太长时间,也会浪费太多内存。”这不是
打开的功能;使用它。“我不想使用“open('file')”,因为这会将整个内容写入内存,这会花费太长时间,也会浪费太多内存。”这不是
open
所做的;使用它。