我希望能够有一系列嵌套循环使用同一个pickle文件。见下文:
def pickleRead(self):
try:
with open(r'myfile', 'rb') as file:
print 'Reading File...'
while True:
try:
main = pickle.load(file)
id = main[0]
text = main[1]
while True:
try:
data = pickle.load(file)
data_id = data[0]
data_text = data[1]
coefficient = Similarity().jaccard(text.split(),data_text.split())
if coefficient > 0 and data_text is not None:
print str(id) + '\t' + str(data_id) + '\t' + str(coefficient)
except EOFError:
break
except Exception as err:
print err
except EOFError:
break
print 'Done Reading File...'
file.close()
except Exception as err:
print err
第二个(内部)循环运行时没有任何问题,但第一个循环只执行一次迭代,然后停止。我尝试一次获取一行,然后将其与文件中的其他行进行比较。有几千行,我发现cPickle模块执行的任何类似的操作都比不上。问题是,它只限于暴露的内容。谁能给我指出正确的方向吗?在
内部循环只有在读取文件时碰到
EOFError
时才会停止,所以当您到达第二次外循环迭代时,您已经读取了整个文件。所以,如果你想多读一点,你就会被淘汰。在首先,我应该说本·w的回答确实解释了你所经历的行为。在
至于你提出的更广泛的问题“如何使用Python完成我的任务?”我建议只使用一个文件循环将所有pickle对象加载到内存中的数据结构中(一个以id作为键、文本作为值的字典似乎是一个自然的选择)。一旦加载了所有的对象,您根本就不会弄乱文件;只需使用内存中的数据结构。如果愿意,可以使用现有的嵌套循环逻辑。可能看起来像(伪代码)
相关问题 更多 >
编程相关推荐