如何在Python中逐行读取文件(或stdin),而不等待读取完整文件

6 投票
3 回答
10257 浏览
提问于 2025-04-17 04:27

我想在Python中逐行读取和处理一些大文件,并将结果输出到终端。我看过如何从标准输入读取?如何用Python写一个Unix过滤器?,但我在寻找一些方法,这些方法不需要等到整个文件都读入内存。

我会使用这两个命令:

cat fileName | python myScript1.py
python myScript2.py fileName

3 个回答

-1
if __name__ == '__main__':
    while 1:
        try:
            a=raw_input()
        except EOFError:
            break
        print a

这个会从标准输入读取数据,直到遇到文件结束符(EOF)。

如果你想用第二种方法读取文件,可以使用Tim的方法。

也就是说:

with open("myfile.txt", "r") as myfile:
    for line in myfile:
        print line
        # do something with the current line
4

只需遍历这个文件就可以了:

with open('huge.file') as hf:
  for line in hf:
    if 'important' in line:
      print(line)

这样做只需要 O(1) 的内存。

如果想从标准输入读取内容,只需遍历sys.stdin,而不是 hf

import sys
for line in sys.stdin:
  if 'important' in line:
    print(line)
9

这是Python中文件对象的标准行为

with open("myfile.txt", "r") as myfile:
    for line in myfile:
        # do something with the current line

或者

for line in sys.stdin:
    # do something with the current line

撰写回答