我在Stack Overflow中發現了一些類似的問題,但我相信我可以從特定於我的案例的建議中受益。從文件中讀取數字列表的最快方法
我必須在一個文件中存儲大約8萬個實值數字列表,並在稍後讀取它們。
首先,我想cPickle
,但閱讀時間沒有吸引力:
>>> stmt = """
with open('pickled-data.dat') as f:
data = cPickle.load(f)
"""
>>> timeit.timeit(stmt, 'import cPickle', number=1)
3.8195440769195557
後來我發現,存儲數字作爲明文允許更快的讀取(有道理的,因爲cPickle
必須擔心很多東西):
>>> stmt = """
data = []
with open('text-data.dat') as f:
for line in f:
data.append([float(x) for x in line.split()])
"""
>>> timeit.timeit(stmt, number=1)
1.712096929550171
這是一個很好的改善,但我認爲我仍然可以優化它在某種程度上,因爲其他語言編寫的程序可以從文件中顯着更快的讀取類似的數據。
任何想法?
如果你存儲這麼多的列表,sqlite數據庫是不是一個更好的數據結構? – BrtH 2012-08-02 14:28:13
您是否嘗試過'csv'模塊的閱讀器?它會避免你所調用的手動分割。 – jmetz 2012-08-02 14:28:56
@BrtH數據庫看起來像是一種矯枉過正,我只需要加載所有這些列表。 – erickrf 2012-08-02 15:46:39