2013-10-04 86 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