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と辞書型は便利