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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

1405閲覧

pngから、pickleに変更したいのですが、やりかたがわかりかねます。

Deep_passion

総合スコア47

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/12/18 04:56

前提・実現したいこと

1,png=>pickle

2,pngファイルをpickleにしたいです。どのようにすればよいのかわかりかねます。(保存までできたら、すごく助かります。)

3,ファイルの中身はこちらになります。
イメージ説明

発生している問題・エラーメッセージ

<PIL.PngImagePlugin.PngImageFile image mode=RGB size=704x520 at 0x7F1A700BE050> --------------------------------------------------------------------------- TypeError Traceback (most recent call last) /tmp/ipykernel_34/3632781486.py in <module> 10 # pickle.load(f) 11 ---> 12 with open(new_im, 'rb') as f: 13 masks = pickle.load(f) 14 for i in range(7): TypeError: expected str, bytes or os.PathLike object, not PngImageFile

該当のソースコード, 完全に自作なので、全くわかりかねます。

#part1, import os from glob import glob all_image=glob(os.path.join(config.MASK_PATH+ '*')) #part2 import matplotlib.pyplot as plt for _, idx in enumerate(all_image): im = Image.open(idx) p = pickle.dumps(im) new_im = pickle.loads(p) print(new_im) # with open(new_im, 'rb') as f: # pickle.load(f) with open(new_im, 'rb') as f: masks = pickle.load(f) for i in range(7): fig.add_subplot(2, 4, i+1) plt.gca().title.set_text(f'mask[{i}]') plt.imshow(masks[i]) plt.show

試したこと

1,上記のpickeに変換するサイトをみつけた
2,自作しました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

Python3 (3.7.4)
macbookpro 16

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

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

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

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

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

ppaul

2021/12/18 05:16

何のためにpngから、pickleに変更したいのですか?
1T2R3M4

2021/12/18 05:34

わからないなら勉強するなり、調べるなりしてください。 ここは作業依頼するばしょではありません。
Deep_passion

2021/12/18 05:45

すいません、なにかヒントをいただければ幸いです。よろしくお願いします。
guest

回答1

0

ベストアンサー

質問にあるように、読み込んだpngをそのままpickleにすることにあまり意味がありませんので不要な気がします。 pickleからでなく、直接pngを読めばいいでしょう。


で、終るのもなんですから、そういうのは抜きにして質問に答えてみます。

まず、pickle.dumps()はこういう関数です。

pickle.dumps(obj, protocol=None, *, fix_imports=True, buffer_callback=None)

ファイルに書く代わりに、bytes オブジェクトとしてオブジェクト obj の pickle 表現を返します。

pickle.loads()はこういう関数です。

pickle.loads(data, /, *, fix_imports=True, encoding="ASCII", errors="strict", buffers=None)

Return the reconstituted object hierarchy of the pickled representation data of an object. data must be a bytes-like object.

なので、

python

1 im = Image.open(idx) 2 p = pickle.dumps(im) 3 new_im = pickle.loads(p)

この処理は、pngのイメージをimに読み込んで、その情報をpickleしたものを生成してpに入れ、それをまたデコードしてnew_imに入れています。この、new_imはimと同じものということになります。

ということなので、質問の「pngファイルをpickleにしたいです。どのようにすればよいのかわか」らないというのは、気付いていないだけです。

p がそのpngイメージをpickle化したものです。

「保存までできたら」ということですが、pをファイルに書き込めばOKです。

まず、保存するファイル名を作る必要があります。
ここでは、'output.pickle' という名前にします。

python

1with open('output.pickle', mode='wb') as f: 2 f.write(p)

とすればOKです。

読み出すときは、

python

1 with open(new_im, 'rb') as f: 2 masks = pickle.load(f)

ではだめです。 new_imは先にも書いたとおり、ファイル名でなく、pngのデータそのものですから、エラーになります。

python

1 with open('output.pickle', 'rb') as f: 2 masks = pickle.load(f)

のように、出力したファイルの名前にしなければなりません。


ちなみに、pに入っているpickle化したデータそのものが処理の中で不要なのであれば、pickle.dumps() でなく pickle.dump() (sがない)を使えば、直接ファイルに書き込むことができます。

pickle.dump(obj, file, protocol=None, *, fix_imports=True, buffer_callback=None)

オブジェクト obj を pickle 化し、すでにオープンしている ファイルオブジェクト file に書き込みます。

python

1pickle.dump(im, 'output.pickle')

投稿2021/12/18 06:05

TakaiY

総合スコア13790

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

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

Deep_passion

2021/12/18 06:43

すごすぎて言葉になりません。感無量。
Deep_passion

2021/12/18 07:17

Takai Yさんお世話になっております。Takaiさんのもとで、働きたいと考えております。どちらにお勤めになられていますでしょうか?よろしくおねがいします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問