ファイル処理

ファイル処理

open()関数とファイルオブジェクト

 Python でファイルを読み書きするときは、組み込み関数 open() を使ってファイルを開きます。最初の引数にはファイルのパスを渡します。絶対パス (フルパス)、相対パスのどちらでも構いません (パスの扱い方についてはこちらの記事を参照してください)。作業フォルダ (プログラムを実行しているフォルダ) に格納されているファイルであれば、ファイル名だけ渡せば開けます (この場合はファイル名が相対パスになっています)。

 open() は ファイルオブジェクト を返します。このオブジェクトを介してファイルの読み書きを実行します。デフォルト設定では、ファイルは読み込み専用モード (mode = "r") で開かれます。

 open() で開いたファイルは、最後に必ず close()メソッドで閉じるようにしてください。これを忘れると、複数のファイルを開いたときにプログラムが誤作動することがあります。記事の後半でファイルの閉じ忘れを防ぐ構文についても解説します。

ファイルへの書き込み

 引数 mode に "w" を指定すると、新規ファイルを作成して書き込み専用モードで開きます。ファイルへの書き込みは write()メソッドなどを使って実行します。
 以下のコードでは "pynote" という名前のテキストファイルを作成して、"Python" と書き込みます。

# リストRW-A-1

# テキストファイルを新規作成して書き込み専用で開く
f = open("pynote.txt", mode = "w")

# ファイルに書き込み
f.write("Python")

# ファイルを閉じる
f.close()

 mode = "w" ですでに存在しているファイルを開くと、中身を空にしてしまうので注意してください。内容を追加して書き込みたいときは後述する mode = "a" を指定します。
 

ファイルの読み込み

 引数 mode を省略するか、"r" を指定すると、ファイルは読み込み専用モードで開かれます。リストRW-A-1 で作成した pynote.txt を読み込んで内容を表示させてみます。読み込みにはファイルオブジェクトの read()メソッドを使います。

# リストRW-A-2

# テキストファイルを読み込み専用で開く
f = open("pynote.txt", mode = "r")

# ファイルの内容を表示
print(f.read())

# ファイルを閉じる
f.close()
Python

 

ファイルへの追記

 open() の最初の引数にすでに存在しているファイル名を渡して mode = "a" を指定すると、write()メソッドで末尾に追記することができます。

# リストRW-A-3

# テキストファイルを追記モードで開く
f = open("pynote.txt", mode = "a")

# ファイルの末尾に追記
f.write("\nAnaconda")

# ファイルを閉じる
f.close()

# テキストファイルを読み込み専用で開く
f = open("pynote.txt", mode = "r")

# ファイルの内容を表示
print(f.read())

# ファイルを閉じる
f.close()
Python
Anaconda

 リストRW-A-3を実行すると、"Python" のあとに改行を1つ入れて "Anaconda" というテキストが追加されます。それから、もう一度 pynote.txt ファイルを読み込んでファイルの内容を表示します。
 

読み書き両方

 mode の + オプションは "w", "r", "a" と組合わせて、ファイルを読み書き両方できる状態で開きます。次のコードでは、mode = "a+" でファイルを開いて内容を表示した後で、末尾に "\nJupyter Notebook" を書き込みます。そして再度 pnyote.txt を開いて内容を確認しておきます。

# リストRW-A-4

# テキストファイルを読み書き両用モードで開く
f = open("pynote.txt", mode = "a+")

# テキストの内容を読み込んで表示
print(f.read())

# ファイルの末尾に追記
f.write("\nJupyter Notebook")

# ファイルを閉じる
f.close()

# テキストファイルを読み込み専用で開く
f = open("pynote.txt", mode = "r")

# ファイルの内容を表示
print(f.read())

# ファイルを閉じる
f.close()
Python
Anaconda
Jupyter Notebook

 

日本語の読み書き

 ファイルに書き込む文字列に日本語などの非アスキー文字が含まれていると、環境によっては変換がうまくいかずに文字化けすることがあります。open() の encoding で変換方式 (エンコード) を指定しておいたほうが安全です。現在最も広く使われている変換方式は utf-8 です。

# リストRW-B-1

# テキストファイルを新規作成して書き込み専用で開く
f = open("pybook.txt", mode = "w", encoding = "utf-8")

# ファイルに書き込み
f.write("Python 数値計算入門")

# ファイルを閉じる
f.close()

 非アスキー文字を含むファイルを開く場合も、encoding で変換方式を指定しておきます。

# リストRW-B-2

# テキストファイルを読み込み専用で開く
f = open("pybook.txt", mode = "r", encoding = "utf-8")

# ファイルの内容を表示
print(f.read())

# ファイルを閉じる
f.close()
Python 数値計算入門

 

ファイルを自動的に閉じる

 with構文 を使うとファイルの閉じ忘れを防ぐことができます。with構文は、

 with open(ファイルパス, モード) as 変数名:
   コード

の形で記述します。ファイルを閉じる命令文は明示されていませんが、ブロック内のコードが実行された後に自動的にファイルを閉じてくれます。

# リストRW-C

# ファイルへの書き込み
with open("pyfile.txt", "w") as f:
    f.write("Matplotlib")

# ファイルの読み込み
with open("pyfile.txt", "r") as f:
    print(f.read())
Matplotlib