「Pythonでファイルを作成したい」
「Pythonでファイル読み込みを行いたい」
「with文に関してよくわからない・・・」
このような場合には、この記事の内容が役に立ちます。
この記事では、open関数とwith文によるファイル作成・読み込みを解説しています。
本記事の内容
- open関数
- ファイルの作成・追記・読み込み
- with文(構文・キーワード)を使うメリット
それでは、上記に沿って解説していきます。
open関数
とりあえず、open関数だけ覚えましょう。
open関数だけで、ファイル作成と読み込みは対応できます。
open(file, mode='r', buffering=- 1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
fileを開き、対応するファイルオブジェクトを返します。
戻り値が、ファイルオブジェクトだということです。
ファイルの新規作成でも、ファイルオブジェクトが戻り値となります。
新規でも、追記でも、読み込みでも、とにかくopen関数はファイルオブジェクトを返します。
まずは、このことを覚えましょう。
そして、最も重要なオプションがmodeになります。
この値により、open関数の振る舞いが変わります。
文字 | 意味 |
---|---|
‘r’ | 読み込み用に開く (デフォルト) |
‘w’ | 書き込み用に開き、まずファイルを切り詰める |
‘x’ | 排他的な生成に開き、ファイルが存在する場合は失敗する |
‘a’ | 書き込み用に開き、ファイルが存在する場合は末尾に追記する |
‘b’ | バイナリモード |
‘t’ | テキストモード (デフォルト) |
‘+’ | open for updating (reading and writing) |
上記が、用意されているモードとなります。
よく使うのは、’r’と’w’になりますね。
あとは、encodingも使うことがあります。
指定がなければ、プラットーフォームに依存します。
encodingについては、今回はこの辺で。
以上、open関数について説明しました。
次は、open関数を使ってファイルの作成・追記・読み込みを行いましょう。
ファイルの作成・追記・読み込み
open関数は、あくまでファイルオブジェクトを作成するだけです。
modeにより、それが読み込み用なのか、書き込み用なのかが決まります。
そして、ファイルオブジェクトには関数が用意されています。
これさえあれば十分という関数が、以下となります。
- write()
- read()
- readline()
上記の3つさえ知っていれば、次の処理が可能となります。
- ファイルの作成
- ファイル追記
- ファイル読み込み
では、下記でそれぞれを確認しましょう。
ファイルの作成
‘w’ | 書き込み用に開き、まずファイルを切り詰める |
open関数により、ファイルオブジェクトを書き込みモードで作成します。
f = open('a.txt', mode='w') f.write('1') f.close()
上記を実行すると、次のファイルが作成されます。
a.txtがすでに存在していたら、上書きすることになります。
a.txt
1
なお、ファイルオブジェクトはclose関数で閉じる必要があります。
例えば、DB接続は閉じないとヤバイですよね。
これと同じだと考えておきましょう。
ファイル追記
‘a’ | 書き込み用に開き、ファイルが存在する場合は末尾に追記する |
open関数により、ファイルオブジェクトを追記モードで作成します。
f = open('a.txt', mode='a') f.write('2') f.close()
上記を実行すると、a.txtの末尾に追記されます。
a.txt
1 2
改行したい場合は、改行コードを自分で設定する必要があります。
ただ、改行コードは、環境によって異なります。
そのため、「os.linesep」を利用しています。
これで各環境に合わせた改行コードになります。
import os f = open('a.txt', mode='a') f.write(os.linesep) f.write('3') f.close()
上記を実行すると、a.txtは次のようになります。
a.txt
12 3
改行されていますね。
ファイル読み込み
‘r’ | 読み込み用に開く (デフォルト) |
open関数により、ファイルオブジェクトを読み込みモードで作成します。
f = open('a.txt', mode='r') print(f.read()) f.close()
上記を実行した結果は、以下。
12 3
a.txtの内容そのままですね。
read関数は、ファイルの内容すべてを取得します。
ファイルから一行を読み出したいという場合は、readline関数を用います。
ただ、個人的にはreadlineを利用することはほとんどありません。
read関数で読み込んだ文字列を改行コードで分割すればいいだけです。
以下のようなコードで対応できます。
import os f = open('a.txt', mode='r') txt = f.read() f.close() txt_list = txt.split(os.linesep) print(txt_list)
リスト型になるので、より使い勝手はいいはずです。
なお、readline関数を使うのは、かなり大きなサイズのファイルが対象となる場合です。
read関数で一気に読み込んでしまうと、メモリが溢れる可能性があります。
これを回避するためにreadline関数を使うぐらいでしょうかね。
以上、ファイルの作成・追記・読み込みについて説明しました。
次は、with文を利用するメリットを説明しておきます。
with文(構文・キーワード)を使うメリット
open関数は、次のようにして利用しました。
f = open('a.txt', mode='r') print(f.read()) f.close()
常にclose関数を書くのは、手間です。
コードが複雑になると、忘れてしまう可能性もあります。
この手間を省く方法があります。
それが、with文です。
with文を使うと、ファイル読み込みは次のようなコードになります。
with open('a.txt', mode='r') as f: print(f.read())
シンプルになりました。
close関数の記述もなくなりました。
これだけでもwith文を使うメリットがあります。
以上、with文(構文・キーワード)を使うメリットを説明しました。