在不打开文件的情况下读取文件的前N行(Python)
我有一个Python脚本,它需要读取一个非常大的文本文件的一部分,从第N行开始,到N+X结束。 我不想使用“open('file')”,因为这会将整个内容写入内存,这会花费太长时间,也会浪费太多内存。 我的脚本在Unix机器上运行,因此我目前使用本机的head和tail函数,即:在不打开文件的情况下读取文件的前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') 但我觉得一定有更聪明的方法。。 有没有一种方法可以在不打开整个文件的情况下在
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
所做的;使用它。