Python 递归地从cPickle加载并创建变量来存储它们
我手头有26个.pkl文件,从dict_a.pkl到dict_z.pkl。我想把它们加载到内存中,这样我就可以比较从dict_a.pkl加载的变量开始的元素。我想这样做的原因是每个文件都非常大,如果我把它们都放在一个大文件中,它将太大而无法消化。若我以一种特别的方式加载文件,那个么它将不断地读取磁盘Python 递归地从cPickle加载并创建变量来存储它们,python,variable-names,Python,Variable Names,我手头有26个.pkl文件,从dict_a.pkl到dict_z.pkl。我想把它们加载到内存中,这样我就可以比较从dict_a.pkl加载的变量开始的元素。我想这样做的原因是每个文件都非常大,如果我把它们都放在一个大文件中,它将太大而无法消化。若我以一种特别的方式加载文件,那个么它将不断地读取磁盘 import string alphabet = string.lowercase for alpha in alphabet: ff = 'dict_'+alpha+'.pkl' w
import string
alphabet = string.lowercase
for alpha in alphabet:
ff = 'dict_'+alpha+'.pkl'
with open(ff, 'r') as tt:
temp = cPickle.load(tt)
如何在循环中用dict_a,dict_b替换temp变量,这样在循环后,我可以直接使用变量dict_a来dict_z 您可以使用glob模块加载pickle文件,然后逐个处理它们
import glob
import cPickle as pickle
picklefiles = glob.glob('*.pkl')
for pklfile in picklefiles:
with open(pklfile,'rb') as f:
pklfile = pickle.load(f)
现在有26个字典及其相应的文件名
编辑:你说得对@Sean我把第三行搞乱了它应该是picklefiles而不是pklfiles。我已经更新了代码片段
编辑2:picklefiles是包含扩展名为.pkl的所有文件名的列表。在这种情况下
picklefiles = [ 'dict_a.pkl', 'dict_b.pkl', ........ 'dict_z.pkl' ]
在for循环中,我打开每个文件,并将字典加载到具有相应文件名的字典中
例:
这是dictionary dict_a.pkl={values from dict_a.pkl}类型的变量您可以有一个dict键'dict_a',dict_b。。。当对应的值是pickle对象时,您可能喜欢的一个技巧是:可以将多个pickle保存到单个文件中,然后逐个加载它们。你不需要26个文件。谢谢,@bernie。我的泡菜是多维度的列表。在为它们编制索引时,代码将无法读取。我将尝试找出其他方法。我尝试运行您的代码。如果我是正确的,第三行应该是“*.pkl”。我尝试运行您的代码。第三行应该是“*.pkl”,如果我是正确的话。pklfiles只是一个包含所有pkl文件名的列表,比如dict_x.pkl。根据代码,我想它将输出dict_x.pkl之类的变量。但这绝对不是一个变量名。运行代码后,我只得到了一个包含最后一个pkl文件内容的变量pklfile。可能我没有正确运行它,在运行代码后,我只得到了一个包含最后一个pkl文件内容的变量pklfile。第三行应该是picklefiles=glob.glob'*.pkl'。结果是pickle文件,对吗?实际上是for循环。是否使用pickle文件替换pickle文件中的原始字符串?