【python での開発効率爆上げ!?】〜 python でオブジェクトをそのままファイルに出力する方法〜
何の記事??
最近 python を使うことが多いのですが、データ処理時に中間的にオブジェクトをファイル出力したいなぁ〜と思う時があります。
基本的に numpy に処理したデータを入れたものの・・・という状況が非常に多く、今回は numpy をそのままファイル出力してしまう方法を記事にしました!!
バッチ処理とかまた一から回すのかって話の解決方法にもなるかと思います。
使うライブラリ
今回は、pickle というライブラリを使います。
ちなみに pickle って「ピクルス」「漬ける」という意味らしいです。
なのでオブジェクトを漬け込んでファイルにしちゃおう的な?
ちなみにファイルはテキストとバイナリの両方で作成できるのですが、python3 系ではバイト系の扱いを基本としているため、バイナリの方法を記載します。
使い方
それでは早速使い方をみていきましょう。
import numpy as np
np_ary = np.array([[1,2],[3,4],[5,6]])
f = open('sample.pickle','wb')
pickle.dump(np_ary, f)
f.close
これでディレクトリを確認してみてください。sample.pickle というファイルができていると思います。
それではポイントを見ていきましょう。
まずは1行目。pickle を import してあげましょう。
次に4行目です。ファイルとしてオープンしてあげる必要があります。この時、先述の通り第二引数を wb とバイナリの書き込みとしてオープンしてあげてください。
そして5行目。pickle モジュールの dump メソッドでオブジェクトをファイルに漬け込んでいきます。第一引数には対象のオブジェクト。第二引数には、先ほどオープンしたファイルを指定してください。
それでは、次に読み込みを見ていきましょう。
import numpy as np
f = open("sample.pickle", "rb")
obj = pickle.load(f)
これで obj の中に先ほどの配列が入っています。ぜひ確認して見てくださいね。
読み込みも先ほどの説明とあまり変わりはありません。
ファイルをオープンし、pickle の load メソッドで展開してあげます。ファイルオープンの際の第二引数は rb でバイナリ読み込みを指定することをお忘れなく!(。◔`◡◔+)ゞ
最後に
バッチってどんなに頑張っても回りきらない時は回りきりません笑
それをいかにどこから復旧できるかとか、ジョブを管理されているかだと思います。データが絡むサービスを展開しようとすると割と半ブラックボックスのようになってしまうので中間ファイルを作っておくことは問い詰められた時の護身用にもなりますね笑
それではまた次回〜