【8日目】Python勉強メモ -ファイルへの入出力-
Pythonでプログラムをしていると、ファイルから情報を読み取ったり、アウトプットとしてテキストファイルに記述する場合がある。
本日はPythonによるファイルへの入出力のお話。
前回はこちら ultrabirdtech.hatenablog.com
ファイルを開く
ファイルを読み書きする場合は、最初にファイルをopen
する必要がある。
fileobject = open(filename, mode)
filename
には今回操作対象になるファイル名を指定する。
mode
には操作の種類を指定する。
mode
には2文字まで指定可能である。
1文字目は操作を意味している。
操作の種類 | 意味 |
---|---|
r | 読み出し。 |
w | 書きこみ。ファイルが存在しない場合新規作成、存在する場合は上書き。 |
x | 書き込み。ファイルがまだ存在しないときのみ機能する。上書きによるファイルの損失を防ぐことが可能。 |
z | ファイルが存在する場合は、追記(現在の末尾の後ろへの書き込み)。 |
2字目はファイルのタイプ。 2字目は指定しないことも可能で、その際はテキスト形式という意味になる。
ファイルのタイプ | 意味 |
---|---|
t | テキスト |
b | バイト |
(なし) | テキスト |
開いたファイルは閉じる必要がある。
一連のファイルの読み込み、書き込みなどの処理が終わったらファイルをclose()
する。
fileobject.close()
※後ほどwith
も説明します。
ファイルへの書き込み
write()
を使用する。
下記ソースコードをfile_write.py
として保存する。
# ファイルをオープンする fileobject = open('test.txt', 'wt') # ファイルに文字列(test)を記入 fileobject.write('test') # ファイルを閉じる fileobject.close()
上記処理実行前
$ cat test.txt
上記処理実行後
$ python file_write.py $ cat test.txt test
ファイルからの読み取り
read()
やreadline()
などを使用する。
fileobject = open('test.txt', 'rt') print(fileobject.read()) fileobject.close() =========実行結果========= test
引数なしでread()
を使用すると、ファイル全体を呼び出すことになるため大きなファイルを使用する際は注意が必要になる。その際はread()
に引数として数値を渡せば、文字数分のみ読み込んでくれるようになる。
fileobject = open('test.txt', 'rt') chank = 1 print(fileobject.read(chank)) fileobject.close()
上記ではread()
の引数にchank
として数値1
を渡しているため、1文字ずつ読み込んでいる。
withを使った自動クローズ
開いたファイルを閉じ忘れると、ファイルが参照されなくなった時にPythonが自動的にclose()
処理を行ってくれる。主に関数内で呼び出されれば関数の処理が終わるタイミング、メインプログラムであれば、そのメインプログラムが終わった時だ。(GCと同じタイミングと考えていいらしい)
しかしclose()
処理を忘れてしまうと、エラーが発生してしまうと今までの書き込み処理などが全て消失してしまう恐れがある。このエラーが関数が終わる前などGCが発生する前に起きてしまうと処理が失われてしまう。
そのようなclose()
忘れを防ぐためにwith
というものがある。
with open('test.txt', 'wt') as f: t.write('string')
上記のような書き方をするだけで、with
句を抜けた際自動的にclose()
がされる。
Let's Try
課題1. 10行のファイルを用意して1行ずつ表示するプログラムを作成してみよう
例) 10行のテキストファイル
abc def ghi jkl mno pqr stu vwx yz! ???
実行結果
$ python file_readline.py abc def ghi jkl mno pqr stu vwx yz! ???
課題2. ファイルが存在する場合にx
を指定した際にどのようなエラーが出るか確認してみよう
実行結果
$ python file_write_xoption.py Traceback (most recent call last): File "file_write_xoption.py", line 1, in <module> fileobject = open('test.txt', 'xt') FileExistsError: [Errno 17] File exists: 'test.txt'
次回はこちら ultrabirdtech.hatenablog.com