【问题标题】:How to write a python script that operates on a list of input files?如何编写一个对输入文件列表进行操作的python脚本?
【发布时间】:2025-11-28 12:15:01
【问题描述】:

我有一个接受输入文件的程序:

python subprogram.py < input.txt > out.txt

如果我有多个输入文件,我如何编写一个在这些输入上运行并产生单个输出的 Python 程序?我相信程序应该像这样运行:

python program.py < input_1.txt input_2.txt > out.txt 

程序本身应该是这样的:

from subprogram import MyClass
import sys

if __name__ == '__main__':
    myclass = MyClass()
    myclass.run()

【问题讨论】:

  • 您的 shell 脚本中存在概念错误,&lt;&gt; 修饰符只能指定一个文件,而不是文件列表。

标签: python class parsing input import


【解决方案1】:

看看fileinput 模块

import fileinput
for line in fileinput.input():
    process(line)

这会遍历 sys.argv[1:] 中列出的所有文件的行,如果列表为空,则默认为 sys.stdin。如果文件名是“-”,它也被 sys.stdin 替换。要指定文件名的替代列表,请将其作为第一个参数传递给 input()。也允许使用单个文件名。

【讨论】:

    【解决方案2】:

    让你的程序接受命令行参数:

    python program.py input_1.txt input_2.txt > out.txt 
    

    您可以像这样访问它们:

    from subprogram import MyClass
    import sys
    
    if __name__ == '__main__':
        class = MyClass()
        class.run(sys.argv)
    

    您使用的方式与 Python 无关,而与您的 shell 有关。您只是将标准输入/输出重定向到文件。如果你想实现这一点:

    cat input1.txt input2.txt | python subprogram.py > out.txt
    

    【讨论】:

    • 或者在Windows平台上:输入input_1.txt input_2.txt | python program.py > out.txt
    【解决方案3】:

    让您的外壳为您完成工作:

    cat input_1.txt input_2.txt | python program.py > out.text
    

    cat 命令将两个输入文件连接在一起,您的 python 程序可以从标准输入中读取并将它们视为一个大文件。

    【讨论】:

      最近更新 更多