この章では、Pythonにおけるファイル操作と入出力について学びます。ファイルを読み書きする機能は、プログラムにデータを保存したり、外部のデータを利用する際に重要です。この章では、テキストファイルやバイナリファイルの読み書き方法、ディレクトリ操作、コンソールからの入力と出力、そしてデータのシリアル化とデシリアル化について詳しく説明します。
9.1 ファイルの読み書き (StreamReader, StreamWriter, Fileクラス)
Pythonでは、open()
関数を使ってファイルを開き、読み書きすることができます。ファイル操作の基本的な流れとしては、ファイルを開いて操作し、最後にファイルを閉じることが推奨されます。
ファイルを開く、読み込む、閉じる
テキストファイルを読み込む例を見てみましょう。
# ファイルの読み込み
with open('sample.txt', 'r') as file:
content = file.read()
print(content)
このコードでは、with
ステートメントを使ってファイルを開いています。with
ステートメントを使うと、ファイルを開いた後に自動的に閉じられるので、ファイルを手動で閉じる必要がありません。
ファイルに書き込む
次に、ファイルにテキストを書き込む例です。
# ファイルへの書き込み
with open('output.txt', 'w') as file:
file.write('Hello, World!')
このコードでは、ファイルにHello, World!
というテキストを書き込んでいます。'w'
モードを使うと、ファイルが存在しない場合は新たに作成され、存在する場合は内容が上書きされます。
読み込みモードと書き込みモード
'r'
: 読み込み専用(ファイルが存在しないとエラー)'w'
: 書き込み専用(ファイルが存在しない場合は作成される。既存の内容は上書き)'a'
: 追記モード(既存の内容は保持され、ファイルの末尾にデータを追加)'b'
: バイナリモード(テキストではなくバイナリデータを扱う)
9.2 バイナリデータの操作 (BinaryReader, BinaryWriter)
テキストファイルの代わりに、バイナリファイルを操作する場合、バイナリモードでファイルを開く必要があります。
バイナリファイルの読み込み
with open('image.png', 'rb') as binary_file:
data = binary_file.read()
print(data[:10]) # 最初の10バイトを表示
'rb'
モードを使ってファイルを開くと、バイナリデータを読み込むことができます。バイナリデータは通常、画像や音声ファイル、シリアライズされたデータなどを扱う際に使用されます。
バイナリファイルへの書き込み
with open('output.bin', 'wb') as binary_file:
binary_file.write(b'\x00\x01\x02\x03\x04')
'wb'
モードでは、バイナリデータを書き込むことができます。b'\x00\x01\x02'
のようなバイト列を直接書き込むことができます。
9.3 ディレクトリとファイル操作 (Directory, FileInfoクラス)
Pythonでは、os
モジュールやpathlib
モジュールを使って、ディレクトリやファイルの操作を行うことができます。
ディレクトリの作成と削除
os
モジュールを使って、ディレクトリを作成したり削除したりすることができます。
import os
# 新しいディレクトリを作成
os.makedirs('new_directory')
# ディレクトリを削除
os.rmdir('new_directory')
ファイルやディレクトリの存在確認
os.path
やpathlib
を使って、ファイルやディレクトリが存在するかを確認できます。
import os
# ファイルが存在するか確認
if os.path.exists('sample.txt'):
print('ファイルが存在します')
ファイルのリストを取得
特定のディレクトリに存在するファイルをリストアップするには、os.listdir()
を使用します。
files = os.listdir('.')
print(files) # カレントディレクトリ内のファイルを表示
9.4 コンソール入力と出力
Pythonでは、input()
関数を使ってユーザーからの入力を受け取り、print()
関数で出力を行います。
コンソール入力
name = input('名前を入力してください: ')
print(f'こんにちは、{name}さん!')
このコードでは、ユーザーが名前を入力すると、その名前が出力されます。
コンソール出力のフォーマット
print()
関数を使って、文字列のフォーマットを行うことができます。Pythonのf
文字列(フォーマット済み文字列)を使うと、変数を埋め込んだ文字列を簡単に作成できます。
age = 25
print(f'私は{age}歳です')
9.5 シリアル化とデシリアル化 (JSON, XML形式)
シリアル化は、オブジェクトを保存可能な形式(ファイルやバイナリデータ)に変換する操作を指し、デシリアル化は、その逆で、保存されたデータをオブジェクトに戻す操作です。
JSONのシリアル化とデシリアル化
Pythonでは、json
モジュールを使って、データをJSON形式に変換(シリアル化)したり、JSONデータをPythonオブジェクトに変換(デシリアル化)したりできます。
import json
# シリアル化(PythonオブジェクトをJSONに変換)
data = {'name': 'Alice', 'age': 30}
json_data = json.dumps(data)
print(json_data) # {"name": "Alice", "age": 30}
# デシリアル化(JSONをPythonオブジェクトに変換)
data_back = json.loads(json_data)
print(data_back) # {'name': 'Alice', 'age': 30}
XMLのシリアル化とデシリアル化
PythonでXMLを扱う場合は、xml.etree.ElementTree
モジュールを使うことができます。
import xml.etree.ElementTree as ET
# XMLデータを構築
root = ET.Element("person")
name = ET.SubElement(root, "name")
name.text = "Alice"
age = ET.SubElement(root, "age")
age.text = "30"
# XMLデータをファイルに保存
tree = ET.ElementTree(root)
tree.write("person.xml")
# XMLファイルを読み込む
tree = ET.parse('person.xml')
root = tree.getroot()
print(root.find('name').text) # Alice
まとめ
この章では、Pythonにおけるファイル操作、ディレクトリ管理、コンソール入出力、シリアル化とデシリアル化の基本を学びました。これらのスキルを活用することで、プログラムが外部データと連携したり、ユーザーとのインタラクションを行うことが可能になります。次の章では、例外処理とデバッグについて詳しく見ていきます。