〜 卓越した品質へ 〜

リストやディクショナリのようなオブジェクトをそのままファイルに書き込むことができる標準ライブラリにpickleモジュールがあります。このpickleモジュールもPytho2とPython3で違いがあります。

Python2では次のようにディクショナリのデータをそのままファイルに書き込む処理ができます。

>>> file = open('binary.txt', 'w')
>>> dic = {'a':100, 'b':101, 'c':102}
>>> import pickle
>>> pickle.dump(dic, file)
>>> file.close()
>>>
>>> file = open('binary.txt')
>>> read_dic = pickle.load(file)
>>> read_dic
{'b': 101, 'a': 100, 'c': 102}
>>>

これをPython3で実行すると,[pickle.dump()]のところでエラーとなってしまいます。

>>> file = open('binary.txt', 'w')
>>> dic = {'a':100, 'b':101, 'c':102}
>>> import pickle
>>> pickle.dump(dic, file)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: write() argument must be str, not bytes
>>>

書き込みはバイトでなく文字列にしなくてはいけないみたいです。これは,ファイルを開くときに,バイナリ指定をしていないために発生する事象みたいです。詳細は分かりませんが,バイナリを指定して開くとうまく動作します。

>>> file = open('binary.txt', 'wb')
>>> dic = {'a':100, 'b':101, 'c':102}
>>> import pickle
>>> pickle.dump(dic, file)
>>> file.close()
>>>
>>> file = open('binary.txt', 'rb')
>>> read_dic = pickle.load(file)
>>> read_dic
{'b': 101, 'a': 100, 'c': 102}
>>>

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.