私はシリアライズとデシリアライズしたい辞書を持っているのピクルスとDateTimeオブジェクトをデシリアライズ:私は使用して辞書をシリアライズおよびデシリアライズしてい異なるWindowsのバージョン
dict = {
datetime.datetime.strptime('2016-10-01', '%Y-%m-%d'): {
'product1': 3300.00,
},
datetime.datetime.strptime('2016-10-05', '%Y-%m-%d'): {
'product1': 3000.00,
'product2': 3000.50
},
datetime.datetime.strptime('2016-10-09', '%Y-%m-%d'): {
'product1': 2700.00,
'product2': 2800.50,
'product3': 3600.00
},
datetime.datetime.strptime('2016-10-15', '%Y-%m-%d'): {
'product1': 2500.00,
'product2': 2700.00,
'product4': 666.00
}
}
:
def get_current_datafile():
with open(name='datafile.raw', mode='rb') as input_handle:
input_dict = pickle.loads(input_handle.read())
return input_dict
def write_datafile(new_dict):
with open(name='datafile.raw', mode='wb') as output_handle:
pickle.dump(new_dict, output_handle)
私はそれがうまく動作する一つの環境でシリアル化されたファイルを使用します。しかし、別のマシンでPython環境と同じファイルを逆シリアル化しようとすると、まったく同じように設定されますが、私にはdatetimeモジュールがインストールされていないと主張するトレースバックを与えてしまいます。
Traceback (most recent call last):
File "scraper.py", line 92, in <module>
Scraper().main()
File "scraper.py", line 32, in main
input_dict = self.get_current_datafile()
File "scraper.py", line 82, in get_current_datafile
input_dict = pickle.loads(input_handle.read())
File "Python\lib\pickle.py", line 1388, in loads
return Unpickler(file).load()
File "Python\lib\pickle.py", line 864, in load
dispatch[key](self)
File "Python\lib\pickle.py", line 1096, in load_global
klass = self.find_class(module, name)
File "Python\lib\pickle.py", line 1130, in find_class
__import__(module)
ImportError: No module named datetime
だけ私の知る環境の違いは、Windows版である - 1台のマシンが稼働している:
Python 2.7.12
Pickle r. 72223
Windows 7 x64
と他の一つが実行されている:
Python 2.7.12
Pickle r. 72223
Windows 10 x64
を質問です:私は一貫してシリアライズとデシリアライズすることができますので、私は自分の環境を設定する必要がありますどのようにそれらの間のファイル?
私が使用した一時的な回避策は、日付を平文の文字列として保存し、逆シリアル化した後にdatetimeでラップすることでした。 – mkierc