こんにちは、美味しいしです。
結論だけ読みたい、という方はこちら
本当にあった怖い話
最近は卒論発表の時期ですね。
研究成果を一瞬で吹き飛ばす素敵なコマンドとして悪名高いのは
rm -rf hoge
ですよね。
ディレクトリごと全てを抹消できます。
あまりに有名すぎるこのコマンドを誤って使うことは、そんなにないでしょう。(たまに本番環境でやらかしちゃった人 advent calenderなどで目にしますが)
では、以下のpythonのコードはどうでしょう?
import json
nanika = json.load(open("hoge.json","w"))
print(nanika)
一見なんの害もない、ただのデータの確認のように思えますよね。
このコードを実行してみましょう。
すると、なぜかエラーがでる。
io.UnsupportedOperation: not readable
何かtypoでしょうか。
フォルダを確認してみるとと、データがぎっしり詰まっていたはずのhoge.json
が空になっています。
おかしい.......
なぜこのようなことが起きたのでしょう...?
そう全てこいつが悪いんです。
はい、ということで今回のまとめです。
まとめ
python3において、
open(path,"w")
は、ファイルの新規作成を意味します。
すでにファイルが存在しても関係ありません。全てまっさら白無垢な状態で上書きです。
データを無に帰さないためにも、file ioを行う際にはくれぐれも注意しましょう。
対策
def json_load(path):
json.load(open(path,"r"))
def json_dump(obj,path):
json.dump(open(path,"w"))
def pickle_load(path):
return pickle.load(open(path,"rb"))
def pickle_dump(obj,path):
return pickle.dump(obj,open(path,"wb"))
あたりを作っておいて、直接ファイルioをしないようにするのも良さそうです。
みなさんも何か対策なさっていたらコメント等で教えてください。