2013-11-23 23 views
13

私はテキストファイルを使用し、ファイルからデータを操作して別のファイルに出力するpythonスクリプトを持っています。基本的に私はそれが任意のテキストファイル入力のために働くことを望みます。今すぐファイルから読み込み、出力を画面に出力します。出力をファイルにしたい。pythonスクリプトの入力ファイルを端末から取り込む方法は?

したがって、ユーザーは任意のファイルに対して次のとテストを入力することができます。

cat input_file.txt | python script.py > output_file.txt. 

どのように私は私のスクリプトでこれを実装することができますか?ありがとうございました。

catはlinuxでコマンドです。私はそれがどのように機能するのか分かりません。

+1

'cat foo |バーは決して必要ではない。代わりに常に 'bar abarnert

答えて

26

これを行うための最善の方法は、おそらく呼び出すことです:あなたはこのようなプログラムを実行することができ、今

import sys 
with open(sys.argv[1], 'r') as fin, open(sys.argv[2], 'w') as fout: 

はたとえば、あなたはこれに最初の行を変更することができます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へのパイプのデータを(実際には推奨されません)、sys.stdin.readlines()

を使用する必要がある場合あなたは python script.py input_file.txt output_file.txt

を実行することにより、このプログラムを呼び出すことができます

+0

配管が推奨されないのはなぜですか? (あるいは 'cat foo | python bar.py'と' python bar.py

3
cat input_file.txt | python script.py > output_file.txt. 

あなたのPythonスクリプトを実行するためには代わりにその実際のファイルのinput_file.txt内のすべてのデータを持っている大きな文字列を渡すことができ、単なる文字列引数としてあることそれを取ると新しいことで文字列を分割しますライン文字は、たとえば、あなたがその大きな文字列を分割するとOUTPUTFILEに書き込みを区切り文字として「\ n」を使用することができ、普通の道

すなわちopen filewrite to the fileclose file

+1

'を使用することができます "\ n"区切り記号として'かなり誤解を招く。最近のすべてのプラットフォーム_except_ Windowsでは、区切り文字として '\ n 'を使うことができます。 Windowsでは、普遍的な改行でテキストモードを使用しない限り、 '\ r \ n'を使用する必要があります。この場合、PythonではWindowsを別のプラットフォームのように扱うことができます。 – abarnert

+0

@abarnertあなたは私を持っています!更新、thx – JoeC

0

送信出力でそれを行いますファイルへの入力は、ファイルからの入力の取得と非常によく似ています。

モードではなく'w'モードを除いて、読み込みと同じ方法で書き込み用にファイルを開きます。

readまたはreadlineを呼び出すのと同じ方法で、writeを呼び出してファイルに書き込みます。

これはすべてチュートリアルのReading and Writing Filesのセクションで説明されています。だから、

、既存のコードは次のように見える場合:あなたは、ユーザーが通過できるように探しているなら

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) 

with open('input.txt', 'r') as f: 
    while True: 
     line = f.readline() 
     if not line: 
      break 
     print(line) 

あなただけのこの操作を行う必要がありますコマンドラインでファイル名を使用する場合は、sys.argvを使用してファイル名を取得するか、より複雑なコマンドライン引数の解析にargparseを使用してください。

python script.py input_file.txt outputfile.txt 
+0

クール、ありがとう、私はそれが仕事を得た。 –

1

この方法(ご質問)は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 

希望すると便利です。

関連する問題