2013-10-04 83 views
1

我正在基於計數動態地在for循環中創建變量。在For循環中動態創建變量,Python

我使用openpyxl模塊遍歷工作表。

value = ~sheet name after using a loop to iterate over sheet names~ 
wb = (path_to_workbook, use_iterators = True) 
ws = wb.get_sheet_by_name(name = value) 

for a,b,c,d in ws.iter_rows(): 
    print a.internal_value 

的問題是,該變量在for循環的量,取決於有多少活性列有在其每一個從片改變到片材片材。它會吐出錯誤:

"Too many values to unpack"

如果我沒有正確數量的變量來解壓縮到。

我可以用得到的列數:

ws.get_highest_column() 

所以,不知何故,我需要做:

for ~dynamically create variables by count of columns~ in ws.iter_rows(): 
    print variable1.internal_value 

我看到使用EXEC一些帖子,但我沒有任何有關它的經驗,我總是看到它是如何讓你陷入困境的。

+2

您永遠不應該永遠需要動態地命名變量。在這種情況下,您誤解了「for」循環做了什麼 - 如果有幫助,它們就是所謂的其他語言中的_foreach_ loops。 – roippi

+0

謝謝。我明白,for循環是爲每個項目,在這種情況下,每一行。但是每行中可能有很多項目。我使用iter_rows()看到的openpyxl模塊示例的方式,在我看來,這需要完成。這一點以及如果我沒有爲每個活動列設置確切數量的變量,就會發生錯誤。奇怪的行爲,我只是想着這件事。 – Mike

回答

5

無需創建動態數量的參數。改用一個;它被賦予了整個行,​​然後你可以使用索引來訪問項目:

for row in ws.iter_rows(): 
    # row is now a tuple 
    first_value = row[0] 
+0

非常感謝@Martijn!我完全想到這個解決方案,並忘記了索引。感謝您指出了這一點! – Mike

1
for ~dynamically create variables by count of columns~ in ws.iter_rows(): 
    print variable1.internal_value 

你可以簡單地遍歷所有的行,而不拆包每一個。

for row in ws.iter_rows(): 
    # row is a tuple 
    print row[0].internal_value