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

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

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

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

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

Q&A

解決済

1回答

3118閲覧

writelines()が使えない

reirin

総合スコア29

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

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

0グッド

0クリップ

投稿2018/09/21 07:54

編集2018/09/24 08:19

cartopyで

path = "path" list_a = shpreader.Reader(path).geometries() ```と実行してでたデータをpythonのpickleファイルに入れたいのですが ```python with open("map.pkl", "w") as f: f.writelines(list_a) ```を実行すると

TypeError: write() argument must be str, not MultiLineString

writelines関数であればシーケンス型のデータを変換できると思ったのですが何が間違っているかわかりません ご教授ください --- 指摘いただいた通り writeline()関数ではなくpickle.dump()関数を使いpickle化されるように変更しました

with open("map.pkl", "w") as f:
pickle.dump(list_a, f)

TypeError Traceback (most recent call last)
<ipython-input-15-2d4fcb584b95> in <module>()
1 with open("Japan_map.pickle", "w") as f:
----> 2 pickle.dump(shapes, f)

TypeError: write() argument must be str, not bytes

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

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

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

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

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

guest

回答1

0

ベストアンサー

間違い1

list_aは確かにシーケンス型(イテレータ)ですが、その要素は文字列(str型)ではありません。MultiLineStringという型のようです。

これはwritelines()では扱えません。

間違い2

そもそもpickleにしたいといいながら、pickleにするような操作を行っていません。

map.pklというファイル名のファイルに文字列を書き込もうとしているだけです。

参考:
Python: オブジェクトを漬物 (Pickle) にする - CUBE SUGAR CONTAINER

投稿2018/09/21 08:11

hayataka2049

総合スコア30933

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

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

reirin

2018/09/24 02:56

MultiLineString はpickle化できないのでしょうか
hayataka2049

2018/09/24 06:18

たぶんできると思いますが、失敗しますか?
hayataka2049

2018/09/24 06:18

たぶんできると思いますが、失敗しますか?
reirin

2018/09/24 06:45

できなさそうです
reirin

2018/09/24 06:46

もう少し試してみます
hayataka2049

2018/09/24 06:48

新しいことを試して状況が変わったのなら、質問文に追記しておいてください
hayataka2049

2018/09/24 12:18

pickleの際はバイナリモードでファイルを開かないといけません open("map.pkl", "wb")ですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問