[英]fast file loading on python
我在python上加载数据时遇到两个问题,两个scips都可以正常工作,但是它们需要太多时间才能运行,有时结果是“杀死”(第一个)。
我有一个很大的压缩文本文件,并且执行以下操作:
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()
我必须对在上一个脚本中创建的字典进行一些操作
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.