2013-09-28 95 views
0

我有一個程序,它的輸入文件:如何編寫一個在輸入文件列表上運行的python腳本?

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

您的shell腳本中存在一個概念錯誤,'<' and '>'修飾符只能指定一個文件,而不是文件列表。 – kworr

回答

3

讓你的程序接受命令行參數:

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 
+0

或在Windows平臺上: type input_1.txt input_2.txt | python program.py> out.txt – urish

2

讓你的shell做的工作適合你:

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

cat命令將串聯兩個輸入文件一起,你的Python程序可以直接從標準輸入讀取和把它們當作一個大文件來對待。

5

看一看在fileinput模塊

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

這個迭代在sys.argv中列出的所有文件的行[1:],默認爲sys.stdin如果列表是空的。如果文件名是' - ',它也會被sys.stdin取代。要指定替代的文件名列表,請將其作爲input()的第一個參數傳遞。單個文件名也是允許的。

相關問題