Shishou Engineering Blog

Aim for Full Stack Engineer.

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


About
@hiroki8080

京都在住のフリーランスエンジニアです。

ITやIoT, 自作のCMS開発に関することを書いていきます。


主なスキル

Python, Java, C#

AWS, Unity

アプリケーション、フレームワーク、

ライブラリの設計、開発

お仕事のご依頼について

お仕事のご相談・ご依頼などありましたら、

お気軽にお問い合わせください。

e-mail:hiroki-m@gaia.eonet.ne.jp