簡體   English   中英

如何從終端獲取python腳本的輸入文件?

[英]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 filewrite to the fileclose 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文件,方法與調用readreadline

本教程的閱讀和編寫文件部分對此進行了解釋。

因此,如果您現有的代碼如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM