Pythonの印刷出力をテキストファイルに保存する方法
Python の出力をテキスト ファイルに直接エクスポートする方法をついに見つけました。
正直に言うと、私も同じ経験があります。Pythonコードを書いて実行すると、出力がすべてコンソールにちらちらと表示されるんです。ちょっと確認するには便利ですが、後で使うために保存したい場合はどうすればいいのでしょうか?以前はコピー&ペーストして、半分忘れていたことに気づくことがありました。そこで、試行錯誤(主に試行錯誤、もちろん失敗もありましたが)を重ねた結果、ついにスクリプトの出力を直接.txtファイルに送信するかなり簡単な方法を見つけました。誰かのイライラを数時間も節約できるかもしれないので、ぜひ皆さんにも共有したいと思います。
基本的なスクリプトの実行
まず最初に、動作するPythonスクリプトを用意する必要があります。私は通常、main.pyファイルを作成します。そこにコードを書き始めます。理にかなっていますよね?スクリプトがIDE内でただ浮かんでいるだけ、あるいは保存もされていない場合、出力をリダイレクトするのは困難です。私の古いASUSでは、詳細メニューの中に埋もれていたため、適切な場所を見つけるのがいかに大変だったかはよく分かります!とにかく、ターミナルまたはコマンドプロンプトからスクリプトを実行します。WindowsではPowerShellまたはCMD、Linux/Macではターミナルです。実行する際は、正しいフォルダーにいることを確認してください。
書き込みモードでファイルを開く
出力ファイルを開くという部分で、最初は戸惑いました。Pythonのopen()関数が役に立ちます。基本的には、次のようにします。
with open('output.txt', 'w') as file: # your code here
は書き込みモード'w'を意味します。つまり、ファイルが存在する場合は、まずファイルの内容が消去されます。既存のファイルに追加したい場合は、'a'append に変更してください。今のところは、最初からやり直すことをお勧めします。ちなみに、どのシステムでも、フルパスを指定しない限り、ファイルは現在の作業ディレクトリに作成されます。スクリプトの実行場所は次のコマンドで確認できます。
import os print(os.getcwd())
print()テキストファイルへのリダイレクト
これは非常に重要なステップです。通常はprint()コンソールに出力されますが、引数を渡すとfile、代わりにファイルに出力されます。例えば:
print('Here’s my output', file=file)
ターミナルが乱雑になる代わりに、これですべてが に収まりますoutput.txt。コードを整理するには、file=fileprintするたびに引数を追加するだけで済むのが一番簡単だと分かりました。あるいは、すべての標準出力を一時的にリダイレクトしたい場合は、sys.stdoutファイルハンドルと交換することもできますが、正直言ってそれは複雑で、一度しか試したことがなく、結局ここでは必要ありませんでした。
ファイルを閉じるのを忘れないでください
これは私が何度も犯していた大きなミスでした。ファイルを閉じ忘れてしまうのです。ファイルを閉じないと、出力がバッファに残ってしまい、実際にはディスクに書き込まれない可能性があります。withステートメントの良いところは、これを自動的に処理してくれるので、 を呼び出すことを覚えておく必要がないことですfile.close()。よりクリーンで安全、そして信頼性も高くなります。ブロックが終了すると、すべてが保存され、適切に閉じられます。
スクリプトを実行して出力を確認する
すべて設定したら、次のようにスクリプトを実行するだけです。
python main.py
または、Linux/Mac を使用しており、セットアップがデフォルトで Python 3 になっている場合は、次のようにしますpython3。
python3 main.py
出力は の中に表示されるはずですoutput.txt。表示されない場合は、スクリプトのパスを再確認し、実際に実行されているか、どこかにエラーが潜んでいないか確認してください。私のスクリプトは時々、何も表示せずにクラッシュしたり、出力部分をスキップしたりすることがあったので、print実行を確認するためにいくつかのステートメントを追加する必要がありました。
簡単にまとめると、これはロケット科学ではありません
- Pythonファイルを作成する(
main.py) - ファイルを書き込みモードで開く(
with open('output.txt', 'w') as file:) print(..., file=file)保存したい出力に使用- ブロックを利用して
withファイルを自動的に閉じる - スクリプトを実行して確認する
output.txt
正直に言うと、これを理解してからはデバッグが格段に楽になりました。特に長時間実行時や、後でログが必要な時に便利です。python main.py > output.txtターミナルから直接操作することも可能ですが、スクリプト自体でより細かく制御できるため、このアプローチの方が気に入っています。
大量のデータを出力する場合は、file.flush()時々追加することで、メモリに残らずにリアルタイムで保存できるようになります。ストリーミングやログ出力を行う場合は、特に便利です。
とにかく、これがお役に立てば幸いです。私も正しく理解するまでにかなり時間がかかり、実際にはこんなに簡単なことに気づくまで頭を悩ませました。他の誰かがこれを役に立てて、週末のいじくり回しを省けることを願っています。コーディングを楽しんでください!
関連記事
この記事は役に立ちましたか?