今さらPython3 (55) - pickle など
第8章は、結構ボリュームがある気がする。
- 作者: Bill Lubanovic,斎藤康毅,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
設定ファイル?
configparserというのを使う方法がある。その前に、こんなテキストファイルを作ってみよう。
[english] greeting = Hello [french] greeting = Bonjour [german] greeting = Gutentag [files] home = /usr/local # Simple insertion bin = %(home)s/bin
それのファイルを使って値を読み込む。
>>> import configparser >>> cfg = configparser.ConfigParser() >>> cfg.read('settings.cfg') ['settings.cfg'] >>> cfg <configparser.ConfigParser object at 0x1007755f8> >>> cfg['german'] <Section: german> >>> cfg['german']['greeting'] 'Gutentag' >>> cfg['files']['bin'] '/usr/local/bin' >>>
もっと詳しい使い方は、これを見てねと。
14.2. configparser — Configuration file parser — Python 3.3.6 documentation
>>> cfg['german']['greeting'] = 'Hallo' >>> cfg['german']['greeting'] 'Hallo' >>> with open('settings.cfg', 'wt') as cf: ... cfg.write(cf) ... >>>
とは言え、cfgファイルに書くところぐらいまではやっておこうよ。
XMLやJSONより小さくて高速なバイナリデータ交換方式もあるらしい。とりあえず名前だけ。
MessagePack: It's like JSON. but fast and small.
google/protobuf · GitHub
Apache Avro 1.7.7 Documentation
Apache Thrift - Home
pickle
>>> import pickle >>> import datetime >>> now1 = datetime.datetime.utcnow() >>> pickled = pickle.dumps(now1) >>> now2 = pickle.loads(pickled) >>> now1 datetime.datetime(2015, 12, 23, 8, 4, 15, 772061) >>> now2 datetime.datetime(2015, 12, 23, 8, 4, 15, 772061) >>>
漬け物にする(pickle)から圧縮というイメージがつきまとうけど、now1というのをシリアライズ(直列化と言われてもねぇ)して、それを復元してnow2に戻して、はい、now1とnow2は同じでしょという事ですね。
>>> class Tiny(): ... def __str__(self): ... return 'tiny' ... >>> obj1 = Tiny() >>> obj1 <__main__.Tiny object at 0x1019d9e80> >>> str(obj1) 'tiny' >>> >>> pickled = pickle.dumps(obj1) >>> pickled b'\x80\x03c__main__\nTiny\nq\x00)\x81q\x01.' >>> obj2 = pickle.loads(pickled) >>> obj2 <__main__.Tiny object at 0x101b83e80> >>> str(obj2) 'tiny' >>>
dump()からloads()をしているので復元できてますってところか。ちなみに、シリアライズの反対をデシリアライズと呼ぶらしい。デシリアライズして変なモノが動くと困るので、信用できないオブジェクトについては触るべからずと。
構造化されたバイナリファイル
Excelファイルからデータを抜き出すxlrdというツールがあるらしい。
pypi.python.org
The xlrd Module
Excel側でCSVとして吐き出せば良いのかなと思いつつ、Excelのものすごい古いバージョンとか、壊れてexcelで開けなくなったファイルとかからデータを吸い出すような使い道はあるかもと思ったり。
HDF5というのは、大規模のデータセットへの高速なランダムアクセスに優位らしいけど、今のところ使い道がイメージ付かない。Appendix Cで取り上げられているらしいので、時間があれば立ち寄る感じかな。
(つづく)