a+モードでファイルを開くと内容が読み取れない
ファイルの内容を同時に読み書きしたいことがあったので、
こんな感じにa+モードで内容を読み込もうとしたら・・・
>>> with open('hoge.txt', 'a+') as f: ... r = f.readlines() ... print(r) ... []
なんと内容が読み込めていません!
a+モードなんて初めて使ったので使い方が違うのだろうと思い
試しにw+モードで読み込んでみても同様の結果に・・
そんなバカな・・疲れているんだろうか・・とも思いましたが、
調べてみたところ、どうやらこのモードだと読み込み位置が先頭にならないようでした。
その為、読み込む際には予めseek関数で位置を先頭に移動する必要があります。
>>> with open('hoge.txt', 'a+') as f: ... f.seek(0) ... r = f.readlines() ... print(r) ... 0 ['fugafuga']
追記モードでもあるので、書き込み位置が最後に来るという事なんだと思いますが、
readlines()の時は自動的に先頭にしてくれても良い気がしますよね。
(確かJavaなんかはこの辺り意識しなくても良かった気がします。)
ちなみに、w+モードの場合は開いた瞬間にファイルの中身が消えるので、
読み込む内容がないだけでした笑
2018-02-24 23:28:23