Pythonでファイルを読み書き可能な権限でOpenする方法
本ページでは、Pythonでファイルを読みながらそれに応じて書き込みをしたい、といった読み書き権限(Read/Write permission)でファイルをOpenする方法について解説します。
方法#
open の引数に "r+" を渡します。
f = open("test.txt", "r+")
"w+" でもよさそうに見えますが、ファイルの中身を消してしまうので注意してください。
そして、 "r+" でのファイルOpen後、 read あるいは seek を利用して書き込みをしたい位置にストリーム位置を移動させる必要があります。 その後に write を実施することで、既存のファイルの任意の位置に書き込みをすることができます。
f = open("test.txt", "r+")
f.seek(10) # 10文字目へ移動
f.write("something")
説明#
openのモードについて#
open は Python の組み込み関数であり、以下のように引数が定義されています。
open(file, mode='r', buffering=- 1, encoding=None, \
errors=None, newline=None, closefd=True, opener=None)
上記関数の mode がファイルをどのモードでOpenするか設定する引数になります。 mode に指定する文字列とその意味はマニュアルによると以下の通りになっています。
モード | 意味 |
r | 読み出しモード (default) |
w | 書き込みモード、初めにファイルを切り詰め(truncate)る |
x | 排他的モードでファイル作成、すでに存在する場合失敗 |
a | 書き込みモード、ファイルが存在する場合には末尾から追記していく |
b | バイナリモード |
t | テキストモード (default) |
+ | 更新モード (reading and writing) |
注意が必要なのが "w" を設定した際の動作で、初めにファイルを truncate = 削除してしまいます。 いわばこの "w" は常に新規作成モードです。
ストリーム位置について#
ストリーム位置はPythonがfile objectを操作する際に利用されるパラメータの1つで、現在ファイルのどの位置を読み書きしようとしているのかを保持しています。
ストリーム位置は read などの読み出し関数、あるいは seek というシーク用の関数を利用することで変更ができます。
現在のストリーム位置がどこであるかを知るためには tell を利用します。