【问题标题】:reading the first N lines in a file without opening it (Python) [duplicate]读取文件中的前 N ​​行而不打开它(Python)[重复]
【发布时间】:2017-02-23 08:39:48
【问题描述】:

我有一个 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')”,因为那样会把整个东西写到内存中,这样既耗时又浪费太多记忆。” 这不是open 所做的;使用它。

标签: python text tail head


【解决方案1】:

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()

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

【讨论】:

    【解决方案2】:

    您的问题的答案在这里: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 Treats 中的 for 行 文件对象 f 作为可迭代对象,它自动使用缓冲 IO 和内存管理,因此您不必担心大文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-26
      • 2011-02-01
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      相关资源
      最近更新 更多