質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

6289閲覧

Pythonのpickleでバイナリーデータにutf-8でデコードする方法

amaturePy

総合スコア131

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/02/15 03:33

Python3.7、エディターはjupiter notebookで自然言語解析の前処理を行っています。
そこでpickleを使って正規表現処理をした後の文章データを保存したいのですが、
保存処理して出来たファイルの中身が以下のようになり、うまく保存されないです。
イメージ説明
実行した際にエラーは出ず、きちんと正規化された文章データの中身がエディタ内で表示されてます。
イメージ説明
問題は文字コードだと思うのですが、今回のようにバイナリーデータ(wb)で保存したい場合は,
openの引数にencoding=utf-8をいれる処理は出来なかったと認識しています。
その他にpickleでデータを保存する際に上記エラーを解決する方法に関してアドバイスを頂きたいです。

import re import pickle wagahai = re.sub("《[^》]+》", "", wagahai_original) wagahai = re.sub("[[^》]+]", "", wagahai) wagahai = re.sub("[|  「」\n]", "", wagahai) seperator = "。" wagahai_list = wagahai.split(seperator) wagahai_list.pop() wagahai_list = [x+seperator for x in wagahai_list] print(wagahai_list) with open("wagahai_list.pickle", mode="wb") as f: pickle.dump(wagahai_list, f)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

何をした結果として最初の画像のエラーになっているのかはわかりませんが、pickleはバイナリ形式ですので、たとえば普通のテキストエディタで開こうとして失敗するのは正常です。

読み込みにはpickle.loadを使ってください。

投稿2020/02/15 04:41

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2020/02/15 04:43

ファイルの中身自体には何も問題はなくて、ただUTF-8テキストとして開けないのでテキストエディタが文句を出しただけ。。。という線で回答しています。
amaturePy

2020/02/15 04:51

pickle.loadで最初表示が出来ず、そこで保存データに問題があるのかと浅い知識で調べてたのですが、 今ほど、上のコードで問題なく実装出来ました。
guest

0

ベストアンサー

再現しないので
保存した後にファイルを上書きしている
とか
保存しているファイルと確認しているファイルが、別のファイルであるか別の場所にある
とか
実はこのコードを実行していない
などの可能性を考えた方がいいかと思います。

% python Python 3.6.9 (default, Oct 20 2019, 16:42:50) (略) >>> import re >>> import pickle >>> >>> wagahai = re.sub("《[^》]+》", "", "あいうえお。かきくけこ。さしすせそ") >>> wagahai = re.sub("[[^》]+]", "", wagahai) >>> wagahai = re.sub("[|  「」\n]", "", wagahai) >>> >>> seperator = "。" >>> wagahai_list = wagahai.split(seperator) >>> wagahai_list.pop() 'さしすせそ' >>> wagahai_list = [x+seperator for x in wagahai_list] >>> >>> print(wagahai_list) ['あいうえお。', 'かきくけこ。'] >>> >>> with open("wagahai_list.pickle", mode="wb") as f: ... pickle.dump(wagahai_list, f) ... >>> % od -tx1z -Ax wagahai_list.pickle 000000 80 03 5d 71 00 28 58 12 00 00 00 e3 81 82 e3 81 >..]q.(X....�..�.< 000010 84 e3 81 86 e3 81 88 e3 81 8a e3 80 82 71 01 58 >.�..�..�..�..q.X< 000020 12 00 00 00 e3 81 8b e3 81 8d e3 81 8f e3 81 91 >....�..�..�..�..< 000030 e3 81 93 e3 80 82 71 02 65 2e >�..�..q.e.< 00003a

投稿2020/02/15 04:26

編集2020/02/15 04:43
quickquip

総合スコア11038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amaturePy

2020/02/15 04:52

失礼しました。 再度エディタを起動し直して試した所 pickle.loadで正しく読み込むことが出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問