2014-08-28 148 views
1

我有一个list和一个dict迭代嵌套循环

一旦我输入嵌套for循环,第一个for循环不会继续遍历值。这只允许我遍历一次,无论我的if语句是否成功。

for OldRecord in StripOldList: 
    OldSplitRec = OldRecord.split('_') 
    value1 = OldSplitRec[1] 
    value2 = OldSplitRec[2] 
    value3 = OldSplitRec[3] 
    value3 = OldSplitRec[4] 
    value3 = OldSplitRec[5] 

    diffdict = {} 
    for SomeRec in DiffSplitText: 
     key1, key2, key3, key4, key5= SomeRec.strip().split('_') 
     FinalLabel = key1+"_"+key2+"_"+key3+"_"+key4+"_"key5+"_"+key6 
     diffdict[key1,key2,key3,key4,key5.strip()] = FinalLabel 

     IsNewEdition = True 
     IsNewVersion = True 
     IsNewFileType = True 

     if (value1 == key1 and value2 == key2): 
      IsNewFileType = False 

      if (value3 >= key3): 
       IsNewEdition = False 

      if (value5 >= key5): 
       IsNewVersion = False 
     if (IsNewFileType == True): 
      print "No Match" 
     elif (IsNewEdiion == True): 
      print "Found new edition" 
      link1.write(SomeRec) 
     elif (IsNewVersion == True): 
      print "Found new version" 
      link2.write(SomeRec) 

然后,我举例来说value1key1,或value5key6比较。我的if声明工作,但只做一次,所以这是我唯一关心的部分。

它读看上去就像个文件的一个例子:

Ex_299_Jabba_1993_09_20150805 

所以,如果旧的名单有:

Ex_299_Jabba_1993_09_20130805 
Ex_298_Jabba_1993_09_20130805 
Ex_297_Jabba_1993_09_20130805 

和新的词典有:

Ex_299_Jabba_1993_09_20140805 
Ex_298_Jabba_1994_09_20130805 
Ex_297_Jabba_1993_09_20130805 

它应该识别字典中的更新文件名并将它们写入正确的位置(用强调)。

Ex_299_Jabba_1993_09_**20140805** 
Ex_298_Jabba_**1994**_09_20130805 
+3

向我们展示正在运行的完整示例代码。 – 2014-08-28 14:41:20

+0

什么是“DiffSplitText”?如果您想比较所有可能的配对,请查看['itertools.combinations'](https://docs.python.org/2/library/itertools.html#itertools.combinations)。 – jonrsharpe 2014-08-28 14:42:26

+0

DiffSplitText只是它从 – 2014-08-28 15:06:11

回答

0

从您的评论:

DiffSplitText仅仅是文本文件,它是从

这拉动了名的问题是:如果DiffSplitTextfile对象,它是一个迭代器。您的嵌套循环

for SomeRec in DiffSplitText: 

遍历所有文件中的行,但在第一次迭代,that file iterator is exhausted后!

如果要再次读取行,则必须在外部循环的每次迭代中使用DiffSplitText.seek(0)来重置迭代器。