4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

研究成果を一瞬で吹き飛ばす魔法のコマンド

Posted at

こんにちは、美味しいしです。
結論だけ読みたい、という方はこちら

本当にあった怖い話

最近は卒論発表の時期ですね。

研究成果を一瞬で吹き飛ばす素敵なコマンドとして悪名高いのは

rm -rf hoge

ですよね。
ディレクトリごと全てを抹消できます。
あまりに有名すぎるこのコマンドを誤って使うことは、そんなにないでしょう。(たまに本番環境でやらかしちゃった人 advent calenderなどで目にしますが)

では、以下のpythonのコードはどうでしょう?

import json

nanika = json.load(open("hoge.json","w"))
print(nanika)

一見なんの害もない、ただのデータの確認のように思えますよね。
このコードを実行してみましょう。
すると、なぜかエラーがでる。

io.UnsupportedOperation: not readable

何かtypoでしょうか。
フォルダを確認してみるとと、データがぎっしり詰まっていたはずのhoge.jsonが空になっています。
おかしい.......

なぜこのようなことが起きたのでしょう...?

そう全てこいつが悪いんです。

SCR 2021-02-12 at 19.23.20.png

はい、ということで今回のまとめです。

まとめ

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をしないようにするのも良さそうです。
みなさんも何か対策なさっていたらコメント等で教えてください。

4
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?