何速いです:pickle.load()
早いもの - ピクルされたディクショナリオブジェクトを読み込む、またはJSONファイルを読み込む - ディクショナリに?
または
simplejson.load()
を使用して辞書にJSONファイルをロード
(B)を使用して
(A ')unpickle化'(ロード)漬け辞書オブジェクト、
仮定:ピクルされたオブジェクトファイルは、ケースAの場合はすでに であり、JSONファイルがケースBの場合は既に存在します。
何速いです:pickle.load()
早いもの - ピクルされたディクショナリオブジェクトを読み込む、またはJSONファイルを読み込む - ディクショナリに?
または
simplejson.load()
を使用して辞書にJSONファイルをロード
(B)を使用して
(A ')unpickle化'(ロード)漬け辞書オブジェクト、
仮定:ピクルされたオブジェクトファイルは、ケースAの場合はすでに であり、JSONファイルがケースBの場合は既に存在します。
速度は実際にはデータの内容とサイズによって異なります。
しかし、いずれにせよ、(、Ubuntuの12.04のpython 2.7.3を)のは、例えば、JSONデータを取得し、より高速であるか見てみましょう:
pickle:
107.936687946
cpickle:
28.4231381416
json:
31.6450419426
simplejson:
20.5853149891
ujson:
16.9352178574
yajl:
18.9763481617
:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
テストスクリプト:
import timeit
import pickle
import cPickle
import json
import simplejson
import ujson
import yajl
def load_pickle(f):
return pickle.load(f)
def load_cpickle(f):
return cPickle.load(f)
def load_json(f):
return json.load(f)
def load_simplejson(f):
return simplejson.load(f)
def load_ujson(f):
return ujson.load(f)
def load_yajl(f):
return yajl.load(f)
print "pickle:"
print timeit.Timer('load_pickle(open("test.pickle"))', 'from __main__ import load_pickle').timeit()
print "cpickle:"
print timeit.Timer('load_cpickle(open("test.pickle"))', 'from __main__ import load_cpickle').timeit()
print "json:"
print timeit.Timer('load_json(open("test.json"))', 'from __main__ import load_json').timeit()
print "simplejson:"
print timeit.Timer('load_simplejson(open("test.json"))', 'from __main__ import load_simplejson').timeit()
print "ujson:"
print timeit.Timer('load_ujson(open("test.json"))', 'from __main__ import load_ujson').timeit()
print "yajl:"
print timeit.Timer('load_yajl(open("test.json"))', 'from __main__ import load_yajl').timeit()
出力このJSON構造を与える
はtest.json
とtest.pickle
ファイルにダンプpickle
はそれほど高速ではありません。cPickle
は、pickling/unpicklingオプションを選択した場合、必ず行く方法です。 ujson
は、この特定のデータに関するこれらのjsonパーサーの間で有望です。
また、pypy(Python JSON Performanceを参照)では、json
およびsimplejson
ライブラリの方がはるかに高速です。
も参照してください:
それは結果がデータの他の種類とサイズに、特定のシステムでは異なることに留意することが重要です。
うわー、かなり説明的な答え。私は、シンプソンソンがジョーンよりも面白いということさえ知らなかった。さらに、jsonの方が速い理由は何でしょうか? (私は、それがより簡単に構文解析し、任意のPythonオブジェクトを表すことができるいくつかのピクルス文字列を解析するよりも、辞書にjsonを変換するためだと推測している) –
あなたの例でcpickleを使用すると何時になるのですか? –
ちょっと待って、 'ujson'と' cPickle'を追加します。 – alecxe
インターネットでランダムな見知らぬ人に尋ねる理由は何ですか?自分自身を測定してください! – NPE
これは実際にはコンテンツの種類、長さ、全体のサイズに依存します...また、あなたがそれをしている間に、cPickleとcjsonを試してみることもできます(後者は2.xx、cjsonは3 .xx)を試してみてください。 –
@ Nisan.Hに加えて、はるかに高速であると主張する第三者(すなわちPyPI上)のJSONライブラリもあります。 – delnan