从cPickle递归加载并创建变量来存储它们

时间:2014-08-21 05:39:18

标签: python variable-names

我手边有26个.pkl个文件,从dict_a.pkldict_z.pkl。我想将它们加载到内存中,因此我可以将元素开头与从dict_a.pkl加载的变量进行比较。我想这样做的原因是每个文件都非常大,如果我把它们全部放在一个大文件中,它就太大了无法消化。如果我以ad hoc样式加载文件,那么它将不断读取磁盘。

import string
alphabet = string.lowercase

for alpha in alphabet:
   ff = 'dict_'+alpha+'.pkl'
   with open(ff, 'r') as tt:
       temp = cPickle.load(tt)

如何在循环中将temp变量替换为dict_adict_b,因此在循环之后,我可以直接使用变量dict_a来{{1 }}。

1 个答案:

答案 0 :(得分:0)

您可以使用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循环中,我打开每个文件并将字典加载到具有相应文件名的字典中。

前:

(这是字典类型的变量)dict_a.pkl = {来自dict_a.pkl的值}