テキストファイルに書き込んでみよう
学習の目標
本章では、以下の内容を学習します。
- Pythonでテキストファイルに書き込む基本的な方法を理解する
- write()メソッドを使った文字列の書き込み方法を学ぶ
- 新規ファイルを作成する方法を習得する
- 既存ファイルに内容を追記する方法を理解する
- 複数行のデータをファイルに保存する方法を学ぶ
ファイルの書き込みとは
前回の章では、既存のテキストファイルから内容を読み込む方法を学習しました。 今度は、その逆の操作である書き込みについて学んでいきましょう。
ファイルの書き込みとは、プログラムで作成したデータや計算結果をファイルに保存することです。 これにより、プログラムで生成した情報を後から確認したり、他のプログラムで利用したりできるようになります。
例えば、ユーザーが入力したメモをファイルに保存したり、計算結果をレポートとして出力したりする際に使用します。
基本的な書き込み方法
まずは、最も基本的なファイル書き込みの方法を学習しましょう。
VS Codeでfile_write.py
というファイルを作成し、以下のコードを入力してください。
# ファイルに文字列を書き込む
with open('output.txt', 'w', encoding='utf-8') as file:
file.write('Hello, Python!')
print("ファイルに書き込みが完了しました")
このコードを実行してみましょう。
python file_write.py
実行すると、以下のような結果が表示されます。
ファイルに書き込みが完了しました
実行後、VS Codeのファイルエクスプローラーを見ると、output.txt
というファイルが新しく作成されているはずです。 このファイルをダブルクリックして開いてみてください。
ファイルの中身は以下のようになっています。
Hello, Python!
コードの説明をしていきましょう。
open('output.txt', 'w', encoding='utf-8')
では、ファイルを書き込みモードで開いています。 第2引数の'w'
が書き込みモード(writeの意味)を表しています。 読み込みの時は'r'
でしたが、書き込みの時は'w'
を使用します。
file.write('Hello, Python!')
で、実際に文字列をファイルに書き込んでいます。 write文では、前回学習したように、with文のブロックを抜けると自動的にファイルが閉じられます。
変数の内容をファイルに書き込む
文字列を直接書き込むだけでなく、変数に保存されている内容もファイルに書き込むことができます。
variable_write.py
というファイルを作成し、以下のコードを入力してください。
# 変数の内容をファイルに書き込む
name = "田中太郎"
age = 25
message = f"私の名前は{name}です。年齢は{age}歳です。"
with open('profile.txt', 'w', encoding='utf-8') as file:
file.write(message)
print(f"'{message}' をファイルに書き込みました")
このコードを実行してみましょう。
python variable_write.py
実行結果は以下のようになります。
'私の名前は田中太郎です。年齢は25歳です。' をファイルに書き込みました
実行後、profile.txt
ファイルが作成され、その中身は以下のようになります。
私の名前は田中太郎です。年齢は25歳です。
このように、f文字列を使って変数の内容を組み合わせた文字列をファイルに書き込むことができます。 変数の値が変わると、ファイルに書き込まれる内容も自動的に変わります。
複数行をファイルに書き込む
1つのファイルに複数の行を書き込みたい場合は、改行文字\n
を使用するか、write()
を複数回呼び出します。
multi_line.py
というファイルを作成し、以下のコードを入力してください。
# 複数行をファイルに書き込む方法1: 改行文字を使用
content = "1行目です\n2行目です\n3行目です"
with open('lines1.txt', 'w', encoding='utf-8') as file:
file.write(content)
print("改行文字を使って複数行を書き込みました")
このコードを実行してみましょう。
python multi_line.py
実行後、lines1.txt
ファイルの中身は以下のようになります。
1行目です
2行目です
3行目です
また、別の方法としてwrite()
を複数回呼び出すこともできます。 同じファイルに以下のコードを追加してみましょう。
# 複数行をファイルに書き込む方法1: 改行文字を使用
content = "1行目です\n2行目です\n3行目です"
with open('lines1.txt', 'w', encoding='utf-8') as file:
file.write(content)
print("改行文字を使って複数行を書き込みました")
# 複数行をファイルに書き込む方法2: write()を複数回使用
with open('lines2.txt', 'w', encoding='utf-8') as file:
file.write("最初の行です\n")
file.write("次の行です\n")
file.write("最後の行です")
print("write()を複数回使って書き込みました")
コードを実行すると、lines2.txt
ファイルも作成され、その中身は以下のようになります。
最初の行です
次の行です
最後の行です
どちらの方法でも同じ結果が得られますが、内容によって使いやすい方法を選ぶとよいでしょう。
既存ファイルへの追記
これまでの例では、ファイルを'w'
モードで開いていました。 このモードでは、既存のファイルがある場合、その内容が完全に上書きされてしまいます。
既存のファイルの内容を残したまま、新しい内容を追加したい場合は、'a'
モード(appendの意味)を使用します。
まず、追記のテストをするためのファイルを作成しましょう。 append_test.py
というファイルを作成し、以下のコードを入力してください。
# 最初にファイルを作成
with open('diary.txt', 'w', encoding='utf-8') as file:
file.write("2024年1月1日\n")
file.write("今日は新年です。\n")
print("日記ファイルを作成しました")
このコードを実行して、初期の日記ファイルを作成します。
python append_test.py
diary.txt
ファイルが作成され、中身は以下のようになります。
2024年1月1日
今日は新年です。
次に、このファイルに新しい日記を追記してみましょう。 同じファイルに以下のコードを追加してください。
# 最初にファイルを作成
with open('diary.txt', 'w', encoding='utf-8') as file:
file.write("2024年1月1日\n")
file.write("今日は新年です。\n")
print("日記ファイルを作成しました")
# 既存ファイルに追記
with open('diary.txt', 'a', encoding='utf-8') as file:
file.write("2024年1月2日\n")
file.write("昨日に続いて良い天気です。\n")
print("日記に新しい内容を追記しました")
コードを実行すると、diary.txt
ファイルの中身は以下のようになります。
python append_test.py
2024年1月1日
今日は新年です。
2024年1月2日
昨日に続いて良い天気です。
'a'
モードを使うことで、既存の内容を消すことなく新しい内容を追加できました。 これは、ログファイルや日記のように、継続的にデータを追加していくファイルで特に便利です。
リストの内容をファイルに書き込む
プログラムで作成したリストの内容をファイルに保存することもよくあります。
list_write.py
というファイルを作成し、以下のコードを入力してください。
# リストの内容をファイルに書き込む
shopping_list = ["りんご", "バナナ", "牛乳", "パン", "卵"]
with open('shopping.txt', 'w', encoding='utf-8') as file:
file.write("買い物リスト\n")
file.write("-" * 10 + "\n") # 区切り線
for i, item in enumerate(shopping_list, 1):
file.write(f"{i}. {item}\n")
print("買い物リストをファイルに保存しました")
このコードを実行してみましょう。
python list_write.py
実行後、shopping.txt
ファイルが作成され、中身は以下のようになります。
買い物リスト
----------
1. りんご
2. バナナ
3. 牛乳
4. パン
5. 卵
enumerate(shopping_list, 1)
を使うことで、リストの各要素に1から始まる番号を付けることができます。 "-" * 10
は、"-"
文字を10回繰り返して区切り線を作成しています。
ユーザー入力をファイルに保存する
ユーザーから入力された内容をファイルに保存するプログラムも作ってみましょう。
user_input.py
というファイルを作成し、以下のコードを入力してください。
# ユーザーの入力をファイルに保存
print("メモを入力してください(終了するには空白行を入力)")
memo_lines = [] # メモの行を保存するリスト
while True:
line = input("メモ: ")
# 空白行が入力されたら終了
if line == "":
break
memo_lines.append(line)
# ファイルに保存
with open('memo.txt', 'w', encoding='utf-8') as file:
file.write("--- メモ ---\n")
for line in memo_lines:
file.write(line + "\n")
print(f"{len(memo_lines)}行のメモをファイルに保存しました")
このコードを実行してみましょう。
python user_input.py
実行すると、以下のような操作ができます。
メモを入力してください(終了するには空白行を入力)
メモ: 今日は晴れ
メモ: 散歩に行った
メモ: とても気持ちよかった
メモ:
3行のメモをファイルに保存しました
実行後、memo.txt
ファイルが作成され、中身は以下のようになります。
--- メモ ---
今日は晴れ
散歩に行った
とても気持ちよかった
このプログラムでは、ユーザーが空白行を入力するまで続けてメモを受け取り、それをファイルに保存しています。 while True
ループとbreak
文を組み合わせることで、ユーザーが終了を指示するまで入力を続けられます。
書き込みモードの違い
ファイルを開く際のモードには、いくつかの種類があります。 ここまでに学習したモードをまとめて確認しましょう。
mode_test.py
というファイルを作成し、以下のコードを入力してください。
# 書き込みモードの違いを確認
# 1. 'w'モード: 新規作成または上書き
with open('test_w.txt', 'w', encoding='utf-8') as file:
file.write("最初の内容\n")
print("'w'モードでファイルを作成しました")
# 同じファイルに再度'w'モードで書き込み
with open('test_w.txt', 'w', encoding='utf-8') as file:
file.write("上書きされた内容\n")
print("'w'モードで上書きしました")
# 2. 'a'モード: 追記
with open('test_a.txt', 'w', encoding='utf-8') as file:
file.write("最初の内容\n")
with open('test_a.txt', 'a', encoding='utf-8') as file:
file.write("追記された内容\n")
print("'a'モードで追記しました")
このコードを実行すると、2つのファイルが作成されます。
python mode_test.py
test_w.txt
ファイルの中身は以下のようになります。
上書きされた内容
最初に書き込んだ「最初の内容」は消えて、後から書き込んだ内容で上書きされています。
一方、test_a.txt
ファイルの中身は以下のようになります。
最初の内容
追記された内容
このように、'a'
モードでは既存の内容が保持され、新しい内容が末尾に追加されます。
用途に応じて適切なモードを選択することが重要です。
まとめ
本章では、Pythonでテキストファイルに書き込む基本的な方法について学習しました。 習得した内容は以下の通りです。
open()
関数を'w'
モードで使ってファイルに書き込む方法を理解しましたwrite()
メソッドを使って文字列をファイルに出力する方法を学習しました- 変数の内容や複数行のデータをファイルに保存する方法を習得しました
'a'
モードを使って既存ファイルに内容を追記する方法を理解しました- リストやユーザー入力の内容をファイルに保存する実践的な方法を学習しました
- 書き込みモードの違いと使い分けを理解しました
ファイルへの書き込みは、プログラムで生成したデータを永続的に保存するための重要な技術です。 計算結果の保存、設定ファイルの作成、ログの記録など、様々な場面で活用できる基本的なスキルです。
Starterプランでより詳しく学習
この先のコンテンツを読むにはStarterプラン以上が必要です。より詳細な解説、実践的なサンプルコード、演習問題にアクセスして学習を深めましょう。