Pythonを扱う上で、外部のファイルから読み込んで処理をしたり、読み込んだファイルに新たなデータを書き込み保存したりするファイル操作は良く行われます。
ここでは、初心者の方がはじめの一歩として覚えるべきファイル操作について解説します。
簡単なファイル操作(1行の読み書き)
簡単でもファイル操作の基本となる1行の読み書きについて詳しく解説します。
1.テキストファイルを開き文字を書き込んで保存
最初はファイルの書き込みについて解説します。
01.書き込み用のファイルを開く
今回はREPLを使って操作します。(REPLの使い方はこちら)
ファイルを開くのはopen関数を使います。open関数は読み書き両方とも使います。
引数は2つを指定して記述します。
1つ目の引数にはファイル名(同一ディレクトリで無い場合は、ファイルパス)を指定します。
2つ目の引数にはファイルモードを指定します。ファイルモードとは開いたファイルをどう処理(読み込み・書き込み・追記等)するのかを指定します。
◼️umaibo.txtに開き書き込みモードを指定する
>>> umaibo_file = open('umaibo.txt','w')
REPLを起動したディレクトリある「umaibo.txt」が開かれます。「umaibo.txt」が無い場合は、新しく作成されます。
◼️モードの解説
モード | 説明 |
---|---|
r | 読み込み(何も指定しない場合のデフォルト値) |
w | 書き込み |
x | 排他的書き込み(ファイルが存在する場合はエラーとなる) |
a | 追記書き込み |
+ | 更新用(‘r’、’w’、’a’と一緒に指定する) |
t | テキストモード (デフォルト) |
b | バイナリモード(画像などを書き出すときに使う) |
02.開いたファイルに文字列を書き込む指令を出す
開いているファイルに文字列を書き込みます。
文字列は「umaibo is best stick!」を書き込みます。
ファイルへの書き込みは、file型にあるwriteメソッドを使います。
◼️開いているファイルに文字列「umaibo is best stick!」を書き込む。
>>> umaibo_file.write('umaibo is best stick!')
03.確実にファイルを書き込ませる
先ほどのwriteメソッドはファイルへの書き込み処理を命令しましたが、直ちに書き込みが完了するわけではありません。
ディスクに書き込む出力処理はプログラムの命令に比べてはるかに処理が重たいのです。
今回のような短文であれば即座に処理は完了しますが、書き込む文字列が相当量ある場合はすぐには処理は終わりません。
書き込みを全て完了させるために使うメソッドとして「flush」メソッドを活用します。
>>> uamibo_file.flush()
これで書き込みを全て完了させる事ができます。
補足:もっと安全に書き込みを行いたい
通常の処理であれば「flush」メソッドを使えば良いのですが、もっと確実に書き込みを完了させたい時には「os.fsync」を使います。
>>> import os
>>> umaibo_file = open('umaibo.txt','w')
>>> umaibo_file.write('umaibo is best stick!')
>>> uamibo_file.flush()
>>> os.fsync(umaibo_file.fileno())
これで障害に強いプログラムになりますが、何でも指定すると処理の遅延に繋がります。
僕は滅多に使いませんね。
04.ファイルの接続を解除する
書き込み処理を行った後にはPythonとファイルの接続を切り離します。
これにはfile型のcloseメソッドを使って閉じましょう。
◼️ファイルとの接続解除
>>> umaibo_file.close()
補足:withを使った記述方法
with文で囲うことでcloseが省略可能です。実際の現場ではこちらを使いますね。
>>> with open('umaibo.txt', 'w') as umaibo_file:
… umaibo_file.write('umaibo is best stick!')
… uamibo_file.flush()
2.作ったテキストファイルを読み込んでみよう
次にファイルの読み込みを解説します。
01.テキストファイルの読み込み
先ほど書き込んだテキストファイルを読み込んで表示させて見ましょう。
まずは先ほど作成したテキストファイルを読み込みます。書き込みと同様にpoenメソッドを使い読み込みます。
◼️ファイルの読み込み
>>> umaibo_file = open(‘umaibo.txt’,’r’)
今回は書き込む必要がないため、モードは「r(読み込み)」を指定します。
02.ファイルから読み込んだテキストを表示する
ファイルからテキストを読み込む場合、read()メソッドをします。
Printメソッドを使って読み込んだ文字を表示してみましょう。
>>> print(umaibo_file.read())
umaibo is best stick!
補足:1行だけ読み込む
1行だけ読み込む場合は、readlineメソッドを使います。
>>> umaibo_file = open('umaibo.txt','r')
>>> read_umaibo = umaibo_file.readline()
>>> print(read_umaibo)
umaibo is best stick!
03.接続を解除する
書き込みと同様にPythonとファイルの接続を切り離します。
これにはfile型のcloseメソッドを使って閉じます。
◼️接続の解除
>>> umaibo_file.close()
当然、withを使えばcloseを省略できます。
>>> with open('umaibo.txt','r') as umaibo_file:
... print(umaibo_file.read())
...
umaibo is best stick!
これでテキストへの読み込みは完了です。