Pythonでテキストファイルを作成しopenで読み込む方法は学びました。withステートメントでcloseしなくても自動で閉じてくれるということも学びました。
ファイルを開く時にモードを指定しましたが、まだ触れていないモードがあるのでここで扱っておきましょう。
書き込みと読み込み”w+”
まずファイルを作成するところから復習も兼ねてやってみましょう。
ファイルは次のようにして作ることができます。
sns = """Twitter
YouTube
Instagram
Line
"""
with open("practice.txt", "w") as f:
f.write(sns)
すでにやってきたことですから、特に説明は不要ですね。
実行するとこうなります。(make_file.pyのファイル名でAtomで実行しています)
ここまでは復習です。
では、このファイルの中身を出力(ターミナルに表示)するにはどうすればいいでしょう。こうするとどうでしょう?
sns = """Twitter
YouTube
Instagram
Line
"""
with open("practice.txt", "w") as f:
f.write(sns)
f.read()
ファイルを作成したので、そのまま読み込んでみましたが…
エラーになりました。
ここで読み込みを合わせてやるには、モードを”w+”にする必要があります。コードは次のようになります。
sns = """Twitter
Facebook
YouTube
Instagram
Line
"""
with open("practice.txt", "w+") as f: # モードを "w+"にする
f.write(sns)
f.seek(0) # データの先頭に位置を移動する
print(f.read())
モードを”w+”にすることで読み込みと書き込みを合わせてすることができます。
ファイルを作成した時は、データを読み込む位置は一番最後にきているので、先頭からデータを読み込むためにseek(0)で先頭に移動します。
そこから読み込んでprint()で出力しています。
実行するとこうなります。
ターミナルにファイル内の内容が出力されているのがわかります。
“w+”は”w”と同じようにファイルを上書きするので、単に読み込む為だけに開くと空白のデータになるので注意が必要です。
読み込みと書き込み”r+”
次はファイルを読み込んで書き込むパターンをやってみましょう。今度はモードを”r+”にします。
sns = """Twitter
Facebook
YouTube
Instagram
Line
"""
with open("practice2.txt", "r+") as f: # 存在しないファイルを開いてみる
f.read()
f.seek(0)
f.write(sns)
ここでは存在しないファイルを開こうとしています。
“r+”のモードでは存在しないファイルを開こうとすると次のようにエラーになってしまいます。
ですから、すでに存在するファイルを開いて書き込むことが必要です。
こんどは、今まで使っていたpractice.txtを開いて書き込んでみます。
sns = """Twitter
Facebook
YouTube
Instagram
Line
mixi
"""
with open("practice.txt", "r+") as f:
f.read()
f.seek(0)
f.write(sns)
書き込むデータを一つ増やしています。
実行してみましょう。
元のファイルと書き込むデータが違うことを確認してください。
実行するとこうなります。
ファイルのデータに書き込まれているのがわかります。
まとめ
Pythonのファイルの作成からの操作だけでなく、ファイルを開いてからの操作ができることを学びました。
“w+”モードはファイルを作成した後に、データを読み込むことができます。”r+”モードはファイルを読み込んだ後に書き込むことができます。存在しないファイルを開いた場合はエラーになります。
ファイルのモードをもう一度整理しておきましょう。