Pythonでプログラムを作っていると、「計算結果をファイルに保存したい」「ログを記録しておきたい」といった場面に出くわしますよね。
普段使っているprint関数は、画面に文字を表示するためのものだと思っていませんか?実は、ちょっとした工夫でファイルに出力することもできるんです!
今回は、print関数を使ってファイルに出力する方法を、基本から応用まで分かりやすく解説していきます。
print関数の基本

まず、通常のprint関数の使い方を復習しておきましょう。
画面に出力する基本的な使い方
print("Hello, Python!")
print("こんにちは", "世界")
実行結果:
Hello, Python!
こんにちは 世界
このように、print関数に渡した文字列や値が、コンソール(画面)に表示されます。
print関数のパラメータ
print関数には、いくつかの便利なパラメータがあります。
sep(区切り文字):
複数の値を渡したとき、値と値の間に入る文字を指定できます。デフォルトは半角スペースです。
print("apple", "banana", "orange", sep=", ")
実行結果:
apple, banana, orange
end(末尾文字):
print関数の最後に追加される文字を指定できます。デフォルトは改行(\n)です。
print("Hello", end=" ")
print("World")
実行結果:
Hello World
これらのパラメータに加えて、今回の主役となるfileパラメータがあります。
ファイルに出力する基本方法
print関数のfileパラメータを使うと、画面ではなくファイルに出力できます。
基本的な書き方
# ファイルを書き込みモードで開く
f = open('output.txt', 'w')
# ファイルに出力
print('Hello, Python!', file=f)
print('ファイルに書き込まれました', file=f)
# ファイルを閉じる
f.close()
このコードを実行すると、output.txtというファイルが作成され、以下の内容が書き込まれます。
Hello, Python!
ファイルに書き込まれました
コードの説明
ステップ1: ファイルを開く
f = open('output.txt', 'w')
open関数でファイルを開きます。第2引数の'w'は「書き込みモード」を意味します。
ステップ2: ファイルに出力
print('Hello, Python!', file=f)
print関数のfileパラメータに、開いたファイルオブジェクトfを指定します。
ステップ3: ファイルを閉じる
f.close()
ファイルを閉じないと、データが正しく書き込まれない可能性があります。必ず閉じましょう。
with文を使った安全な書き込み
ファイル操作では、with文を使う方が安全です。
with文の基本
with open('output.txt', 'w') as f:
print('Hello, Python!', file=f)
print('with文を使った出力', file=f)
with文のメリット
自動的にファイルを閉じてくれる:withブロックを抜けると、自動的にファイルが閉じられます。close()を書き忘れる心配がありません。
エラーが発生しても安全:
処理中にエラーが起きても、ファイルは必ず閉じられます。
推奨される書き方
with open('output.txt', 'w', encoding='utf-8') as f:
print('日本語のテキスト', file=f)
print('文字化けしません', file=f)
encoding='utf-8'を指定すると、日本語の文字化けを防げます。
ファイルを開くモードの違い
ファイルを開くときのモードには、いくつか種類があります。
主なモード一覧
‘w’ (書き込みモード – write):
- 新しくファイルを作成して書き込む
- 既存のファイルがある場合は、内容を消して上書きする
with open('output.txt', 'w') as f:
print('最初の行', file=f)
# もう一度実行すると...
with open('output.txt', 'w') as f:
print('上書きされた!', file=f)
ファイルの内容は「上書きされた!」だけになります。
‘a’ (追記モード – append):
- ファイルの末尾に追加で書き込む
- 既存の内容は残る
with open('output.txt', 'a') as f:
print('1行目', file=f)
with open('output.txt', 'a') as f:
print('2行目', file=f)
ファイルの内容:
1行目
2行目
‘r’ (読み込みモード – read):
- ファイルを読み込み専用で開く
- デフォルトのモード(省略可)
‘r+’ (読み書き両用モード):
- ファイルの読み込みと書き込みの両方ができる
モードの選び方
用途に応じて適切なモードを選びましょう。
ログファイルを作りたい:
→ 追記モード'a'を使う
設定ファイルを更新したい:
→ 書き込みモード'w'を使う
処理結果を毎回新しく保存したい:
→ 書き込みモード'w'を使う
文字コード(エンコーディング)の指定
日本語などの全角文字を扱うときは、文字コードを指定する必要があります。
文字化けの原因
Windowsでは、デフォルトの文字コードが環境によって異なる場合があります。文字コードを指定しないと、以下のようなエラーが発生することがあります。
UnicodeDecodeError: 'cp932' codec can't decode byte...
UTF-8の指定方法
with open('output.txt', 'w', encoding='utf-8') as f:
print('日本語テキスト', file=f)
print('こんにちは世界', file=f)
encoding='utf-8'を必ず指定しましょう。UTF-8は、世界中のほとんどの文字を扱える標準的な文字コードです。
その他の文字コード
状況に応じて、他の文字コードを使うこともあります。
# Shift_JISで保存(Windowsの古いシステム用)
with open('output.txt', 'w', encoding='shift_jis') as f:
print('Shift_JISで保存', file=f)
ただし、特別な理由がない限りは、UTF-8を使うのが推奨されます。
複数の値を出力する
print関数は、複数の値をまとめて出力できます。
基本的な複数値の出力
with open('output.txt', 'w', encoding='utf-8') as f:
name = "太郎"
age = 25
city = "東京"
print(name, age, city, file=f)
ファイルの内容:
太郎 25 東京
区切り文字を指定する
with open('output.txt', 'w', encoding='utf-8') as f:
print("りんご", "バナナ", "オレンジ", sep=", ", file=f)
ファイルの内容:
りんご, バナナ, オレンジ
CSV形式で出力する
with open('data.csv', 'w', encoding='utf-8') as f:
# ヘッダー行
print("名前", "年齢", "都市", sep=",", file=f)
# データ行
print("太郎", 25, "東京", sep=",", file=f)
print("花子", 30, "大阪", sep=",", file=f)
ファイルの内容:
名前,年齢,都市
太郎,25,東京
花子,30,大阪
改行の制御
print関数の末尾の改行を制御できます。
デフォルトの動作
with open('output.txt', 'w', encoding='utf-8') as f:
print("1行目", file=f)
print("2行目", file=f)
ファイルの内容:
1行目
2行目
各print文の後に自動的に改行が入ります。
改行を入れない
with open('output.txt', 'w', encoding='utf-8') as f:
print("こんにちは", end="", file=f)
print("世界", file=f)
ファイルの内容:
こんにちは世界
end=""を指定すると、末尾の改行が入りません。
カスタム末尾文字
with open('output.txt', 'w', encoding='utf-8') as f:
print("行1", end=" | ", file=f)
print("行2", end=" | ", file=f)
print("行3", file=f)
ファイルの内容:
行1 | 行2 | 行3
実践的な例
実際の使用例をいくつか紹介します。
例1: ログファイルの作成
import datetime
def write_log(message):
with open('app.log', 'a', encoding='utf-8') as f:
timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(f"[{timestamp}] {message}", file=f)
# 使用例
write_log("プログラムを開始しました")
write_log("データを処理中...")
write_log("処理が完了しました")
app.logの内容:
[2026-01-08 10:30:15] プログラムを開始しました
[2026-01-08 10:30:16] データを処理中...
[2026-01-08 10:30:20] 処理が完了しました
例2: 計算結果の保存
with open('results.txt', 'w', encoding='utf-8') as f:
print("=== 計算結果 ===", file=f)
print("", file=f) # 空行
for i in range(1, 6):
result = i * i
print(f"{i}の2乗 = {result}", file=f)
results.txtの内容:
=== 計算結果 ===
1の2乗 = 1
2の2乗 = 4
3の2乗 = 9
4の2乗 = 16
5の2乗 = 25
例3: データの一覧を出力
students = [
{"name": "太郎", "score": 85},
{"name": "花子", "score": 92},
{"name": "次郎", "score": 78}
]
with open('scores.txt', 'w', encoding='utf-8') as f:
print("生徒名\tスコア", file=f)
print("-" * 20, file=f)
for student in students:
print(f"{student['name']}\t{student['score']}", file=f)
scores.txtの内容:
生徒名 スコア
--------------------
太郎 85
花子 92
次郎 78
例4: 九九の表をファイルに出力
with open('kuku.txt', 'w', encoding='utf-8') as f:
print("=== 九九の表 ===", file=f)
print("", file=f)
for i in range(1, 10):
for j in range(1, 10):
print(f"{i} × {j} = {i*j:2d}", end=" ", file=f)
print("", file=f) # 行の終わりで改行
write()メソッドとの違い
ファイルに書き込む方法として、write()メソッドもあります。
write()メソッドの使い方
with open('output.txt', 'w', encoding='utf-8') as f:
f.write('Hello, World!')
f.write('2行目')
ファイルの内容:
Hello, World!2行目
改行が自動で入らないことに注意してください。
print()とwrite()の比較
print関数の特徴:
- 自動的に改行が入る
- 複数の値を簡単に出力できる
- 値を自動的に文字列に変換してくれる
with open('output.txt', 'w', encoding='utf-8') as f:
print(123, "abc", True, file=f) # 全部文字列に変換される
write()メソッドの特徴:
- 文字列しか書き込めない
- 改行は自分で追加する必要がある
- より細かい制御ができる
with open('output.txt', 'w', encoding='utf-8') as f:
f.write('1行目\n')
f.write('2行目\n')
どちらを使うべき?
print関数を使うべき場合:
- ログやデバッグメッセージを書き込むとき
- 複数の値をまとめて出力したいとき
- 手軽にファイル出力したいとき
write()メソッドを使うべき場合:
- 改行を細かく制御したいとき
- バイナリデータを扱うとき
- パフォーマンスが重要なとき(大量のデータ)
一般的には、print関数の方が使いやすいので、特別な理由がない限りprint関数を使いましょう。
標準出力のリダイレクト
すべてのprint文の出力先を一時的にファイルに変更する方法もあります。
sys.stdoutを使った方法
import sys
# 元の標準出力を保存
original_stdout = sys.stdout
# 標準出力をファイルにリダイレクト
with open('output.txt', 'w', encoding='utf-8') as f:
sys.stdout = f
print('この行はファイルに書き込まれます')
print('こちらもファイルです')
# 標準出力を元に戻す
sys.stdout = original_stdout
print('この行は画面に表示されます')
contextlibを使った方法
from contextlib import redirect_stdout
with open('output.txt', 'w', encoding='utf-8') as f:
with redirect_stdout(f):
print('ファイルに出力')
print('こちらもファイル')
print('画面に表示')
この方法は、既存のコードを変更せずにファイル出力に切り替えたい場合に便利です。
よくあるエラーと対処法
ファイル出力でよく発生するエラーと、その解決方法を紹介します。
エラー1: ファイルが見つからない
# エラーが発生するコード
with open('folder/output.txt', 'w') as f:
print('テスト', file=f)
エラーメッセージ:
FileNotFoundError: [Errno 2] No such file or directory: 'folder/output.txt'
原因:
指定したフォルダ(folder)が存在しない。
対処法:
import os
# フォルダを作成してから書き込む
os.makedirs('folder', exist_ok=True)
with open('folder/output.txt', 'w', encoding='utf-8') as f:
print('テスト', file=f)
エラー2: 文字化けする
原因:
文字コード(エンコーディング)が正しく指定されていない。
対処法:
# 必ずencoding='utf-8'を指定する
with open('output.txt', 'w', encoding='utf-8') as f:
print('日本語テキスト', file=f)
エラー3: ファイルが空になる
# ファイルが空になってしまう例
f = open('output.txt', 'w', encoding='utf-8')
print('テスト', file=f)
# close()を忘れている!
原因:close()を呼び出していないため、バッファの内容がファイルに書き込まれていない。
対処法:
# with文を使う(推奨)
with open('output.txt', 'w', encoding='utf-8') as f:
print('テスト', file=f)
# またはclose()を必ず呼ぶ
f = open('output.txt', 'w', encoding='utf-8')
print('テスト', file=f)
f.close()
エラー4: 既存のファイルが上書きされてしまう
原因:
書き込みモード'w'を使うと、既存のファイルが削除される。
対処法:
# 追記モードを使う
with open('output.txt', 'a', encoding='utf-8') as f:
print('追加の行', file=f)
パフォーマンスの考慮事項
大量のデータを書き込む場合の注意点です。
何度もファイルを開閉しない
悪い例:
# 非効率な書き方
for i in range(1000):
with open('output.txt', 'a', encoding='utf-8') as f:
print(f'行 {i}', file=f)
良い例:
# 効率的な書き方
with open('output.txt', 'w', encoding='utf-8') as f:
for i in range(1000):
print(f'行 {i}', file=f)
1回だけファイルを開いて、その中でループ処理する方が高速です。
バッファリングを活用する
# バッファサイズを指定(1MB)
with open('output.txt', 'w', encoding='utf-8', buffering=1024*1024) as f:
for i in range(10000):
print(f'データ {i}', file=f)
大量のデータを書き込む場合は、バッファサイズを大きくすると高速化できます。
まとめ
Pythonのprint関数を使ったファイル出力について解説しました。
重要なポイント:
- print関数の
fileパラメータでファイルに出力できる with文を使うと安全にファイル操作ができる'w'モードは上書き、'a'モードは追記- 日本語を扱う場合は
encoding='utf-8'を指定する - 複数の値は
sepパラメータで区切り文字を指定できる - 末尾の改行は
endパラメータで制御できる write()メソッドよりprint()の方が手軽- ファイルは必ず閉じる(
with文なら自動) - 大量のデータを書き込むときは、ファイルを1回だけ開く
基本的な書き方のテンプレート:
with open('output.txt', 'w', encoding='utf-8') as f:
print('ここにテキストを書く', file=f)
このシンプルな書き方を覚えておけば、ほとんどの場面で対応できます。
ファイル出力は、プログラムの実行結果を記録したり、データを保存したりする際に欠かせない技術です。ぜひ実際のプログラムで活用してみてください!
参考情報:
- Python公式ドキュメント: https://docs.python.org/ja/3/tutorial/inputoutput.html

コメント