10. ファイルの入出力¶
ファイルの読み書きは、プログラミングにおいて非常に重要な技術です。Python では、簡単にファイルを操作することができます。このセクションでは、ファイルを開く、読み取る、書き込む方法を学びます。
10.1 ファイルを開く¶
ファイルを読み書きするためには、まずファイルを開く必要があります。Python では、open関数を使ってファイルを開きます。この関数は以下のように使用します。
open関数は、開きたいファイルの名前と、そのファイルをどのように開くかを指定するモードを引数に取ります。モードには以下のような種類があります:
'r': 読み取り専用'w': 書き込み専用(既存のファイルは上書きされます)'a': 追記(既存のデータは保持され、末尾にデータが追加されます)'b': バイナリモード(バイナリファイルを操作する際に使います)'+': 読み書き(更新)用
10.2 ファイルを読み取る¶
ファイルを開いた後は、read, readline, readlinesメソッドを使ってファイル内容を読み取ることができます。
# ファイルの内容を全文読み込む
with open('example.txt', 'r') as file:
content = file.read()
print(content)
# ファイルを1行ずつ読み込む
with open('example.txt', 'r') as file:
for line in file:
print(line.strip())
read(): ファイル全体を文字列として読み込みます。readline(): ファイルから 1 行ずつ読み込みます。次に読み込む時には次の行を取得します。readlines(): 全ての行をリストとして返します。
10.3 ファイルに書き込む¶
ファイルにデータを書き込む際には、writeメソッドを使用します。
# 新しいファイルを開き、内容を書き込む
with open('example.txt', 'w') as file:
file.write("Hello, World!")
# 既存のファイルに追記する
with open('example.txt', 'a') as file:
file.write("\n追加の行")
write(text): 指定された文字列textをファイルに書き込みます。改行が必要な場合、自分で\nを追加する必要があります。
10.4 ファイルのクローズ¶
withステートメントを使用することで、ファイルを明示的に閉じる必要がなくなります。withを使わない場合はcloseメソッドを使用してファイルを閉じることを忘れないでください。ファイルを閉じることで、メモリの解放やバッファのフラッシュが行われ、データの喪失を防ぎます。
file = open('example.txt', 'r')
try:
# ファイルを読み取る処理
content = file.read()
finally:
file.close() # ファイルを閉じる
これで、Python における基本的なファイルの読み書きについて学びました。学んだことを実際に Python を使って試してみてください。
演習問題¶
演習 1: ファイルへの書き込み¶
hello.txt というファイルを作成し、「Hello, Python!」という文字列を書き込むプログラムを作成してください。
解答例
演習 2: 複数行の書き込み¶
fruits.txt というファイルを作成し、複数の果物の名前(apple, banana, orange)を各行に書き込むプログラムを作成してください。
解答例
演習 3: ファイルの追記¶
既存の fruits.txt ファイルに「grape」を追加するプログラムを作成してください。
解答例
演習 4: ファイルの行数をカウント¶
テキストファイルを読み込み、そのファイルの行数をカウントするプログラムを作成してください。
解答例
# まずテストファイルを作成
with open('sample.txt', 'w') as f:
f.write('Line 1\n')
f.write('Line 2\n')
f.write('Line 3\n')
f.write('Line 4\n')
f.write('Line 5\n')
# ファイルの行数をカウント
with open('sample.txt', 'r') as f:
lines = f.readlines()
line_count = len(lines)
print(f"ファイルの行数: {line_count}")
# 別の方法:ループでカウント
with open('sample.txt', 'r') as f:
count = 0
for line in f:
count += 1
print(f"ファイルの行数(別の方法): {count}")
演習 5: ファイル内容の検索¶
テキストファイルを読み込み、特定の単語(例: "Python")が含まれる行を表示するプログラムを作成してください。
解答例
# まずテストファイルを作成
with open('text.txt', 'w') as f:
f.write('I love programming.\n')
f.write('Python is great!\n')
f.write('Learning Python is fun.\n')
f.write('JavaScript is also popular.\n')
f.write('Python has many libraries.\n')
# 特定の単語を含む行を検索
search_word = 'Python'
with open('text.txt', 'r') as f:
print(f"'{search_word}' を含む行:")
line_number = 0
for line in f:
line_number += 1
if search_word in line:
print(f" 行{line_number}: {line.strip()}")
演習 6: CSVファイルの作成¶
学生の情報(名前、年齢、成績)をCSV形式でファイルに保存するプログラムを作成してください。
解答例
# 学生データ
students = [
['名前', '年齢', '成績'],
['山田太郎', 20, 85],
['鈴木花子', 21, 92],
['佐藤次郎', 19, 78]
]
# CSVファイルに書き込み
with open('students.csv', 'w', encoding='utf-8') as f:
for student in students:
line = ','.join(str(item) for item in student)
f.write(line + '\n')
print("CSVファイルを作成しました")
# 確認のために読み込み
with open('students.csv', 'r', encoding='utf-8') as f:
print("\nCSVファイルの内容:")
for line in f:
print(f" {line.strip()}")
演習 7: ファイルのコピー¶
あるファイルの内容を読み込んで、別のファイルにコピーするプログラムを作成してください。
解答例
# 元のファイルを作成
with open('original.txt', 'w') as f:
f.write('これは元のファイルです。\n')
f.write('この内容をコピーします。\n')
# ファイルをコピー
with open('original.txt', 'r') as source:
content = source.read()
with open('copy.txt', 'w') as destination:
destination.write(content)
print("ファイルをコピーしました")
# 確認のために両方のファイルを表示
print("\n元のファイル:")
with open('original.txt', 'r') as f:
print(f.read())
print("コピーしたファイル:")
with open('copy.txt', 'r') as f:
print(f.read())
演習 8: 例外処理を含むファイル読み込み¶
存在しないファイルを読み込もうとしたときに、適切なエラーメッセージを表示するプログラムを作成してください。
解答例
filename = 'nonexistent_file.txt'
try:
with open(filename, 'r') as f:
content = f.read()
print(content)
except FileNotFoundError:
print(f"エラー: ファイル '{filename}' が見つかりません")
except Exception as e:
print(f"予期しないエラーが発生しました: {e}")
# 正常に読み込めるファイルの例
# まずファイルを作成
with open('existing_file.txt', 'w') as f:
f.write('このファイルは存在します')
try:
with open('existing_file.txt', 'r') as f:
content = f.read()
print(f"\nファイルの内容: {content}")
except FileNotFoundError:
print("エラー: ファイルが見つかりません")