PythonファイルI/O:ファイル操作、読み書き、管理のマスター
PythonファイルI/O
明確な例とベストプラクティスで、Pythonでのファイルの開き方、読み書き、クローズを学びます。
動画:Pythonでのファイル読み書き
ファイル
ファイルはデータを永続的に格納するディスク上の名前付き場所です。RAMは揮発性であるため、プログラム実行間で情報を保持するにはファイルに頼ります。
ファイル操作の典型的な流れは:オープン → 読み書き → クローズ。
Pythonでのファイルオープン
Pythonの組み込みopen()関数はファイルオブジェクトを返し、I/O操作に使用します。関数シグネチャは:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
重要ポイント:
modeで操作制御:r(読み取り)、w(書き込み、切り詰め)、a(追記)、x(排他的作成)。t(テキスト)がデフォルト;b(バイナリ)はbytesオブジェクトを返す。+で同時読み書き可能。- テキスト扱い時は常に
encodingを指定し、プラットフォーム依存のデフォルト(Windowsのcp1252、Linuxのutf-8など)を回避。
| モード | 説明 |
|---|---|
r | 読み取り(デフォルト) |
w | 書き込み;新規作成または既存切り詰め |
x | 排他的作成;存在時失敗 |
a | 追記;不在時作成 |
t | テキストモード(デフォルト) |
b | バイナリモード |
+ | 読み書き両用 |
f = open("test.txt") # r/rt
f = open("test.txt", "w") # 書き込み
f = open("img.bmp", "r+b") # 読み書きバイナリ
aは文字なので、エンコードしない限り数値97と等価ではありません。テキストファイルでは明示的にencoding='utf-8'を設定してください。
f = open("test.txt", mode='r', encoding='utf-8')
Pythonでのファイルクローズ
適切にファイルをクローズしてシステムリソースを解放します。close()メソッドはシンプルですが、コンテキストマネージャの使用が最も安全なパターンです。
with open("test.txt", encoding='utf-8') as f:
# ファイル操作を実行
pass
コンテキストマネージャは例外発生時でもクローズを保証します。手動でオープンする場合はtry...finallyブロックでラップしてください。
try:
f = open("test.txt", encoding='utf-8')
# 操作
finally:
f.close()
Pythonでのファイル書き込み
書き込みにはw、a、xモードを使用。wは既存内容を上書き;aは保持します。
write()メソッドは文字列(バイナリならbytes)を受け取り、書き込んだ文字数を返します。
with open("test.txt", "w", encoding='utf-8') as f:
f.write("my first file\n")
f.write("This file\n\n")
f.write("contains three lines\n")
行を分けるために改行文字を含めることを忘れずに。
Pythonでのファイル読み取り
rモードでオープン。read()メソッドはオプションのsize引数を取り、省略時はEOFまで読み取ります。
f = open("test.txt", "r", encoding='utf-8')
print(f.read(4)) # 'This'
print(f.read(4)) # ' is '
print(f.read()) # 残り全体
f.close()
seek()でカーソル移動、tell()で現在位置取得:
print(f.tell()) # 現在位置
f.seek(0) # 先頭に戻る
print(f.read()) # 全読み取り
行を効率的にイテレーション:
for line in f:
print(line, end='')
あるいはreadline()とreadlines()で行単位アクセスも可能。
Pythonファイルメソッド
テキストモードでの最も一般的なファイルメソッドの簡潔なリファレンス:
| メソッド | 説明 |
|---|---|
| close() | ファイルを閉じる |
| detach() | 基盤のバイナリバッファを分離 |
| fileno() | ファイルディスクリプタを返す |
| flush() | 書き込みバッファをフラッシュ |
| isatty() | ストリームがインタラクティブかチェック |
| read(n) | 最大n文字読み取り;NoneでEOFまで |
| readable() | ストリームが読み取り可能か |
| readline(n=-1) | 1行読み取り、最大n文字 |
| readlines(n=-1) | 行のリストを返す、最大n文字 |
| seek(offset, from_=SEEK_SET) | カーソルをfrom_(先頭、現在、末尾)からoffset移動 |
| seekable() | ランダムアクセスをサポートするか |
| tell() | 現在のカーソル位置を取得 |
| truncate(size=None) | ファイルをsizeバイトにリサイズ |
| writable() | ストリームが書き込み可能か |
| write(s) | 文字列sを書き込み;書き込んだ文字数を返す |
| writelines(lines) | 文字列のイテラブルを書き込み |
Python
- C言語入出力(I/O)マスター:scanf()とprintf()徹底解説
- C言語ファイルI/O完全ガイド:作成、オープン、管理の実践
- C#ファイルI/O:Stream、FileStream、StreamReader/Writerによる読み書き
- Python データ型マスター: 実践ガイド
- Python 演算子完全マスター: 包括的ガイド
- Pythonリスト操作:作成、アクセス、変更、高度なテクニック
- Python辞書完全ガイド:作成、操作、高度なテクニック
- PythonファイルI/O:ファイル操作、読み書き、管理のマスター
- Pythonでファイル・ディレクトリの存在確認:実践ガイド
- Python JSON:エンコード、デコード、ファイル処理の実践ガイド
- PythonファイルI/O:入出力操作をマスターする