簡體   English   中英

在python上快速加載文件

[英]fast file loading on python

我在python上加載數據時遇到兩個問題,兩個scips都可以正常工作,但是它們需要太多時間才能運行,有時結果是“殺死”(第一個)。

  1. 我有一個很大的壓縮文本文件,並且執行以下操作:

     import gzip import cPickle as pickle f = gzip.open('filename.gz','r') tab={} for line in f: #fill tab with open("data_dict.pkl","wb") as g: pickle.dump(tab,g) f.close() 
  2. 我必須對在上一個腳本中創建的字典進行一些操作

     import cPickle as pickle with open("data_dict.pkl", "rb") as f: tab = pickle.load(f) f.close() #operations on tab (the dictionary) 

您還有其他解決方案嗎? 可能不是涉及YAML或JSON的人...

如果您要腌制的數據是原始且簡單的,則可以嘗試使用marshal模塊: http : //docs.python.org/3/library/marshal.html#module-marshal 這就是Python用於序列化其字節碼的方式,因此它非常快。

第一個評論,位於:

with open("data_dict.pkl", "rb") as f:
        tab = pickle.load(f)
f.close()

f.close() ,上下文管理器( with語法)會自動執行。

現在,關於速度,我不認為您會比cPickle快得多,目的是直接將磁盤上的內容作為Python對象讀取。 如果需要反復運行此腳本,我將嘗試通過pylibmc使用memchached將對象持久存儲在內存中,以便您可以快速訪問它:

import pylibmc

mc = pylibmc.Client(["127.0.0.1"], binary=True,behaviors={"tcp_nodelay": True,"ketama": True})
d = range(10000)          ## some big object
mc["some_key"] = d        ## save in memory

然后,一旦保存后就可以訪問和修改它,即使在先前的程序完成執行后,它也保留在內存中:

import pylibmc
mc = pylibmc.Client(["127.0.0.1"], binary=True,behaviors={"tcp_nodelay": True,"ketama": True})
d = mc["some_key"]        ## load from memory
d[0] = 'some other value' ## modify
mc["some_key"] = d        ## save to memory again

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM