[解決済み] Python 2のオブジェクトをPython 3でアンピッキングする
質問
Python 2.4でpickleしたオブジェクトをPython 3.4で読み込む方法はないでしょうか?
私は、会社の大量のレガシーコードを最新にするために、2to3を実行しています。
これを行った後、ファイルを実行すると、次のようなエラーが発生します。
File "H:\fixers - 3.4\addressfixer - 3.4\trunk\lib\address\address_generic.py"
, line 382, in read_ref_files
d = pickle.load(open(mshelffile, 'rb'))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 1: ordinal
not in range(128)
競合するpickleオブジェクトを見ると、それは
dict
の中に
dict
型のキーと値を含む
str
.
Python 2.4でpickleされたオブジェクトをpython 3.4で読み込む方法はありますか?
どのように解決するのですか?
次のことを伝えなければなりません。
pickle.load()
に、Python のバイト列データを Python 3 の文字列に変換する方法、あるいは
pickle
でバイトのままにしておくこともできます。
デフォルトでは、すべての文字列データをASCIIとしてデコードしようとし、そのデコードは失敗します。参照
pickle.load()
のドキュメントを参照してください。
:
オプションのキーワード引数は fix_imports , エンコーディング と エラー これらは、Python 2で生成されるpickleストリームの互換性サポートを制御するために使用されます。もし fix_imports が真なら、pickleは古いPython 2の名前をPython 3で使われる新しい名前にマップしようとします。その際 エンコーディング と エラー は、Python 2でpickleされた8ビット文字列インスタンスのデコード方法を指示します; これらはそれぞれ、'ASCII' と 'strict' がデフォルトです。また エンコーディング には 'bytes' を指定すると、これらの8ビット文字列をbytesオブジェクトとして読み込むことができます。
エンコーディングの設定に
latin1
にすると、直接データを取り込むことができます。
with open(mshelffile, 'rb') as f:
d = pickle.load(f, encoding='latin1')
Latin-1 は、バイト値 0-255 を最初の 256 個の Unicode コードポイントに直接マップするので、どのような入力に対しても機能します。
別の方法として、データを
encoding='bytes'
で読み込み、すべての
bytes
のキーと値をデコードします。
3.6.8, 3.7.2, 3.8.0 より前の Python バージョンまでであることに注意してください。
のアンピッキングは、Python 2の
datetime
オブジェクトのデータは壊れています。
を使用しない限り
encoding='bytes'
.
関連
-
Python Decorator 練習問題
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
Python カメの描画コマンドとその例
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み] 'int'オブジェクトに'__getitem__'属性がない。
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
-
[解決済み】ValueError: xとyは同じサイズでなければならない