【问题标题】:How to write a program in python that will process a text stream?如何在python中编写一个处理文本流的程序?
【发布时间】:2011-07-13 11:25:15
【问题描述】:

如果这是一个重复的问题,我很抱歉。如何编写 python 脚本将数据作为流处理?我需要这样做,因为我正在处理的文件很大,我宁愿不将文件读入内存。

我知道您可能一次读取文件的一行,但我想要一些可以处理文本流的东西。

【问题讨论】:

  • 读取“一行行”和“一次读取一行文件”有什么区别?
  • 好吧,在输入流中,我不在乎这条线是从哪里来的。我没有对输入进行文件处理。当我说一次读取一行时,这意味着我知道文件,我的程序负责打开和关闭它。

标签: python inputstream text-processing


【解决方案1】:

你的情况听起来很像 the fileinput module 的设计目的。这样你就可以做到:

python script.py file1.txt file2.txt file3.txt file4.txt

script.py

import fileinput
for line in fileinput.input():
    # do stuff here

使用 fileinput 的额外好处是你可以做大致相同的事情 Space_C0wb0y 建议添加一个破折号作为第一个参数:

python script.py - < file.txt

cat file.txt | python script.py -

在 Space_C0wb0y 链接的问题的答案中提到了文件输入,我只是想我会说明如何利用它。

【讨论】:

    【解决方案2】:
    f = open('somefile.txt')
    for line in f:
        process(line)
    

    实际上,f 可以是任何可迭代的对象,例如字符串列表,如果您想从标准输入中读取,甚至可以是 sys.stdin

    【讨论】:

    • 你是对的,这是假设的。但如果这就是程序正在做的所有事情(读取行并在它们上调用process()),那么显式关闭文件是没有意义的
    • 问这种问题的人通常是初学者,因此谨慎的做法是只向他们展示最佳实践,因为他们并不了解更多。
    【解决方案3】:

    您可以从stdin 读取数据,如answer 中所述。这在代码中看起来像这样:

    for line in sys.stdin:
        # do suff
    

    如果你想处理一个文件,那么只需像这样调用脚本(在 Unix 平台上):

    cat file.txt | python script.py
    

    您当然也可以在其中通过管道传输任何其他程序的输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-01
      • 2013-11-11
      • 1970-01-01
      • 2011-12-11
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多