繁体   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