我正在尝试使用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
列表的内容会增加数百倍。无法粘贴它。感谢您查看