【Python】open関数とwith文によるファイル作成・読み込み

【Python】open関数とwith文によるファイル作成・読み込み プログラミング

「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文(構文・キーワード)を使うメリットを説明しました。

タイトルとURLをコピーしました