2014-06-25 48 views
0

我會誠實地承認我曾問過一個較早的相關問題,但我從那以後找到了一個解決方案,另一個問題!我遍歷一個列表來搜索一個大文本文件。搜索涉及獲取第一個列表條目並使用該字符串(數字)通過搜索該條目的文本文件。該腳本工作正常,直到最後一次迭代/最後一個列表條目,其中我收到以下錯誤cmd窗口...雖然Python while循環沒有正確退出,但是在上次迭代中出現'Out of range'錯誤

2014 Apr 25 09:46:58.884 [35] 0x5245 FFFF Rec rst 4444 A 

18.84 
2014 Apr 25 09:46:58.902 [81] 0x5245 FFFF Rec rst 4444 A 

19.62 
2014 Apr 25 09:46:58.944 [2B] 0x5245 FFFF Rec rst 4444 A 

16.69 
Traceback (most recent call last): 
File "C:\MEAN_val.py", line 361, in <module> 
duta() 
File "C:\MEAN_val.py", line 120, in duta 
for word in [framelist[num]]: 
IndexError: list index out of range 
Exception RuntimeError: RuntimeError('sys.meta_path must be a list of import hoo 
ks',) in <bound method Workbook.__del__ of <xlsxwriter.workbook.Workbook object 
at 0x0241F2F0>> ignored 

看來,雖然NUM < = LEN(頁框):功能不工作,並且一旦num達到列表的長度,它就不會退出循環。

這是我工作的一部分代碼...

for root, subFolders, files in chain.from_iterable(os.walk(path) for path in paths): 
     for filename in files: 
      if filename.endswith('.txt'): 

       with open(os.path.join(root, filename), 'r') as fBMA: 

        searchlinesBMA = fBMA.readlines() 
        fBMA.close() 



        num = 0 


        while num<=len(framelist): 
         for i, line in enumerate(searchlinesBMA): 
          for word in [framelist[num]]: 
           if word in line: 
            keylineBMA = searchlinesBMA[i-2] 
            Rline = searchlinesBMA[i+10] 
            Rline = re.sub('[()]', '', Rline) 
            valueR = Rline.split() 
            split = keylineBMA.split() 
            if split[10] == 'A': 
             print keylineBMA 
             print valueR[3] 
             num+=1 

            break 

感謝您的閱讀, MikG

+1

數組中的索引是從0開始的,而len是一個計數,也就是從1開始。將它改爲'while num Nathaniel

+0

應該是'while num dawg

+0

有沒有原因讓你不要只爲幀列表中的幀進行操作:並避免所有與'num'有關的東西?另外'[framelist [num]]:'中的單詞是一個完成一次的循環,所以除非外部的'[]'是虛假的,否則可能是一個賦值'word = framelist [num]'。 – Duncan

回答

0

決定使用以下代碼乾淨地退出循環。無論如何,寫入Excel匹配,所以仍然有點不確定爲什麼索引錯誤在那裏?

except IndexError: 
    pass 
continue 
2

您可以更改您的代碼:

while num<len(framelist) 

因爲長度是一個簡單的計數。如果從零開始並轉到(包括)長度,則要經過循環(長度+ 1)次