[英]How to take input file from terminal for python script?
我有一個python腳本,它使用文本文件並操縱文件中的數據並輸出到另一個文件。 基本上我希望它適用於任何文本文件輸入。 現在我從文件中讀取,然后將輸出打印到屏幕。 我想要輸出文件。
因此,用戶可以鍵入以下內容並測試任何文件:
cat input_file.txt | python script.py > output_file.txt.
如何在我的腳本中實現這一點? 謝謝。
cat是linux中的命令。 我不知道它是如何工作的。
執行此操作的最佳方法可能是將輸入和輸出文件作為python腳本的參數調用:
import sys
inFile = sys.argv[1]
outFile = sys.argv[2]
然后,您可以讀入所有數據,進行操作,並寫出結果:
with open(inFile,'r') as i:
lines = i.readlines()
processedLines = manipulateData(lines)
with open(outFile,'w') as o:
for line in processedLines:
o.write(line)
您可以通過運行python script.py input_file.txt output_file.txt
來調用此程序
如果絕對必須將數據傳遞給python(實際上不推薦),請使用sys.stdin.readlines()
cat input_file.txt | python script.py > output_file.txt.
您可以傳遞一個包含input_file.txt中所有數據的大字符串而不是實際文件,因此為了實現您的python腳本,只需將其作為字符串參數並按新行字符拆分,例如,您可以使用“\\ n”作為分隔符來分割該大字符串並寫入輸出文件,只需按正常方式執行
即open file
, write to the file
並close file
此方法(您的問題)描述了從STDIN讀取數據:
cat input_file.txt | python script.py
解決方案: script.py
:
import sys
for line in sys.stdin:
print line
上述解決方案中的方法描述了使用python調用獲取參數參數:
python script.py input_file.txt
解決方案: script.py
:
import sys
with open(sys.argv[1], 'r') as file:
for line in file:
print line
希望這可以幫助!
將輸出發送到文件與從文件中獲取輸入非常相似。
除了使用'w'
模式而不是'r'
模式外,您打開文件的方式與讀取方式相同。
您通過調用write
文件,方法與調用read
或readline
。
本教程的閱讀和編寫文件部分對此進行了解釋。
因此,如果您現有的代碼如下所示:
with open('input.txt', 'r') as f:
while True:
line = f.readline()
if not line:
break
print(line)
你只需要這樣做:
with open('input.txt', 'r') as fin, open('output.txt', 'w') as fout:
while True:
line = fin.readline()
if not line:
break
fout.write(line)
如果您希望允許用戶在命令行上傳遞文件名,請使用sys.argv
獲取文件名,或使用argparse
進行更復雜的命令行參數解析。
例如,您可以將第一行更改為:
import sys
with open(sys.argv[1], 'r') as fin, open(sys.argv[2], 'w') as fout:
現在,您可以像這樣運行程序:
python script.py input_file.txt outputfile.txt
cat input_file.txt | python script.py > output_file.txt
基本上,python腳本需要讀取輸入文件並寫入標准輸出。
import sys
with open('input_file.txt', 'r') as f:
while True:
line = f.readline()
if not line:
break
sys.stdout.write(line)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.