Python Pickle在迭代大量文件与小数量时的行为不同

时间:2018-01-16 04:54:15

标签: python dictionary while-loop pickle

我正在尝试使用pickle迭代字典,它似乎适用于单个文件,当我遍历小批量文件时,但当我做更多时,会发生一些不稳定的事情。这是我的代码:

   def search_dictionary():
    with open('full_set_name.txt', 'r') as file:
        set_name = []
        for f in file:
           set_name.append(f.strip('\n'))
        count = 0
        while count < 24:
            pickle_in = open("{0}.pickle".format(set_name[count]), 'rb')
            card_d = pickle.load(pickle_in)
            print (set_name[count], card_d)
            count +=1

当我运行此代码且while count小于24时,每个字典按预期打印出来,每个字典按列表的顺序打印。当我做24或更多时,来自set_name的内容位于控制台的顶部,而不是字典中。列表中的每个名称都出现了数百次。  我独立地运行了这些文件,每个字典打印出来都很好。如果运行while count < len(set_name)这将是所有词典,我收到错误:

card_d = pickle.load(pickle_in)
EOFError: Ran out of input

从我读过的内容中,当您尝试读取空的pickle文件时会发生这种情况。每个泡菜的内容肯定有一本字典。我的语法有问题吗?或者文件可能已损坏?我怎么说?如果我单独打印,内容看起来很好。我确实使用字典理解将每个字典的键更改为小写。它有可能被破坏了吗?这是我运行的代码:

count = 0
with open('full_set_name.txt') as sets:
    set_list = []
    for s in sets:
        set_list.append(s.rstrip())
    while count < len(set_list):
        pickle_in = open('{0}.pickle'.format(set_list[198]), 'rb')
        file = pickle.load(pickle_in)
        file =  {k.lower(): v for k, v in file.items()}

        pickle.dump(file, open('{0}.pickle'.format(set_list[198]), 'wb'))
        print (file)
        count += 1

你们觉得怎么样?我确定我可能做了一些愚蠢的事,但我无法弄清楚实际问题。我有一张照片显示第一行的样子。它应该是一本字典,实际上set_name列表的内容会增加数百倍。无法粘贴它。感谢您查看enter image description here

0 个答案:

没有答案