2017-04-02 85 views
-1

其餘迭代我有相互嵌套了幾個圈,我會發布相關的代碼,然後解釋:蟒蛇不是通過陣列

ANN = ['array','of','fourteen','people'] 
COUNT = 14 

for i in range(COUNT): 
    CNT = i 
    print CNT 
    for i in ANN: 
     ANNOTATOR = i 
     for row in PRGREADER: 
      print row 
      if (ANNOTATOR in row[2]) and (WEEK in row[3]): 
       if PRGFILE.strip('.csv') not in ANNODAT[CNT][0]: 
        ANNODAT[CNT][0].append(PRGFILE.strip('.csv')) 

這個代碼塊應該讀csv文件(讀入PRGREADER),檢查並查看ANN的當前值和一週數是否在該行上。如果它們是,它將採用該文件的名稱並將其存儲在一個數組中。

我已經將它縮小到實現迭代通過COUNT,它迭代通過ANN,但之後它只通過ANN執行第一次迭代中的其餘代碼,沒有其他人。爲什麼在ANN的第一次迭代之後,這不會執行其他嵌套代碼?

編輯加入PRGREADER

for filename in os.listdir('progress/'): 
    if filename.endswith('.csv'): 
     PRGFILES.append(filename) 


for i in PRGFILES: 
    PRGFILE = i 
    with open('./progress/' + PRGFILE,'rb') as PROGRESS: 
     PROGRESS = [element.upper() for element in PROGRESS] 
     PRGREADER = csv.reader(PROGRESS, delimiter = ',', quotechar = '|') 
+0

雖然它不會在ANN的每次迭代中執行其餘代碼,但它會繼續迭代ANN,COUNT,並打開它構建的多個文件以處理。唯一不起作用的是它不會爲ANN的其他迭代執行追加塊。 – saniboy

+0

你可能會隱藏有用的信息,並帶有一些特殊的例外情況。另外'PRGFILE.strip'不會做你認爲它做的事。 –

+2

'PRGREADER'是一個文件對象嗎?文件對象只能迭代一次,除非你在讀完之後再回到開頭。 – Kevin

回答

1

您的問題創造了在同一csv.reader對象幾次迭代做。 A reader對象是一個迭代器,因此在迭代一次之後,您將不會再嘗試迭代更多結果,因爲它已經耗盡。每次循環都需要重新創建讀寫器,或者重新組織代碼,以便不需要多次迭代(例如,使其成爲外部循環而不是內部循環)。

您的代碼還有其他許多問題可能需要更改。例如,您重複使用for i in something,然後立即將其他名稱綁定到i。您應該直接將其他名稱直接放入循環中(例如for CNT in range(...))。我還建議遵循一個更好的變量名稱樣式,例如lower_case_with_underscores用於常規變量,併爲常量保留ALL_CAPITALSCapitalizedNames也是常規的類名稱,但您似乎沒有任何這些名稱)。

+0

謝謝!我不知道這一點,這正是我需要推進的。 – saniboy