LoginSignup
1
0

More than 5 years have passed since last update.

Pickleされたデータをテキストファイルに出力する

Last updated at Posted at 2018-06-07

Python初心者の僕が

先輩のご指導のもと、辞書データからpickleで取り出したデータをそのままテキストファイルに書き込もうとしたら失敗した。
対象データはDBLPの学会、著者データ

dic_author = pickle.load(open('dblp_4area_coauthor.dic'))#辞書データからpickle
f = open('A*Amat.txt','w')#書き出しファイル宣言
f.write(author_venue)#書き込み
---------------------------------------------------------------------------
TypeError                         Traceback (most recent call last)
<ipython-input-30-e02e9c0a5373> in <module>()
----> 1 f.write(author_venue)

TypeError: expected a string or other character buffer object

そもそもpickleとは

【参考サイト】

Python 公式ドキュメント 11.1. pickle
開発効率をあげる!Pythonでpickleを使う方法【初心者向け】
[python]オブジェクトのピクル(pickle)化

pickle
動詞 他動詞
〈野菜などを〉塩水[酢]に漬ける.

簡単に説明するとpickleを行うことで複数のオブジェクトをひとまとまりにしたり、そのまとまりを読み込むことができる。
ちなみに読み方はピクル、ピッケルじゃないよ!

pickleすごい…!
データをオブジェクトごと保存できるのか。
つまり今回の問題はpickleで保存しておいた辞書データの書き込みができていなかったという問題であった

辞書もpikleも知らない結果である。

辞書データを書き出す

pythonで利用される辞書型
簡潔にいうとkeyとvalueを持つデータ型
ハッシュで保存されているため要素の検索がO(1)であるとか。

【参考サイト】
【Python入門】dictionary(辞書)型の要素を検索、追加、削除する方法

たしかに、そのまま書き込もうとしてもできるわけがなかった。

というわけで、forループを回した

辞書型のkeyのみを出力する場合は
in hogehoge.keys() とすればよい。

f = open('Vlist_key.txt','w')
for k in dic_venue.keys():
    f.write(venue+'\n')
f.close()

keyとvalueをどちらも出力する場合は、hogehoge.items()としてかつ、変数を2つ用意する。

f = open('Vlist_key.txt','w')
for k,v in dic_venue.items():
    f.write(k+','+str(v)+'\n')
f.close()

結果

$ cat Vlist_items.txt 
JCDL,2
SIGMOD conference,16
:
PODS,17
SIGIR,0
PKDD,14

しらべていたらどうやらjsonだともっと簡単に簡単にできるみたい。

辞書型データをJSONファイルに書き込む

import json
file = open("venuelist.json", 'w')
json.dump(dic_venue, file)
file1.close()

結果

$ cat venuelist.json 
{"JCDL": 2, "SIGMOD conference": 16, "PAKDD": 12, "COLT": 9, "ICML": 6, "ECDL": 3, "NIPS": 5, "TREC": 1, "KDD": 10, "VLDB": 15, "ICDM": 11, "UAI": 7, "ECIR": 4, "ECML": 8, "ICDT": 19, "SDM": 13, "EDBT": 18, "PODS": 17, "SIGIR": 0, "PKDD": 14}

まとめ

pickleと辞書型は便利

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0