Python 对于范围内的i,只使用最后一行-openpyxl
我正在使用openpyxl阅读excel表格。以下是我的问题代码:Python 对于范围内的i,只使用最后一行-openpyxl,python,excel,range,openpyxl,Python,Excel,Range,Openpyxl,我正在使用openpyxl阅读excel表格。以下是我的问题代码: for i in range(3, lastRow): exData = {} exData["param1"] = sheet.cell(row=i, column=1).value exData["param2"] = float(sheet.cell(row=i, column=2).value) exData["param3"] = float(sheet.cell(row=i, col
for i in range(3, lastRow):
exData = {}
exData["param1"] = sheet.cell(row=i, column=1).value
exData["param2"] = float(sheet.cell(row=i, column=2).value)
exData["param3"] = float(sheet.cell(row=i, column=3).value)
exData["param4"] = float(sheet.cell(row=i, column=4).value)
exData["param5"] = float(sheet.cell(row=i, column=5).value)
exData["param6"] = float(sheet.cell(row=i, column=6).value)
exData["param7"] = float(sheet.cell(row=i, column=7).value)
exData["param8"] = float(sheet.cell(row=i, column=8).value)
exData["param9"] = float(sheet.cell(row=i, column=9).value)
exData["param10"] = float(sheet.cell(row=i, column=10).value)
变量lastRow设置为6。现在的问题是,如果我打印exData,它只包含第五行的值。如果我打印出来,它会显示3 4 5。所以它设置正确,但可能没有正确保存?有什么想法吗 您正在为每个循环初始化字典。请在for循环外部初始化字典。或者,您可以使用下面的代码使用列表来存储每个字典
exDatas = []
for i in range(3, lastRow):
exData = {}
exData["param1"] = sheet.cell(row=i, column=1).value
exData["param2"] = float(sheet.cell(row=i, column=2).value)
exData["param3"] = float(sheet.cell(row=i, column=3).value)
exData["param4"] = float(sheet.cell(row=i, column=4).value)
exData["param5"] = float(sheet.cell(row=i, column=5).value)
exData["param6"] = float(sheet.cell(row=i, column=6).value)
exData["param7"] = float(sheet.cell(row=i, column=7).value)
exData["param8"] = float(sheet.cell(row=i, column=8).value)
exData["param9"] = float(sheet.cell(row=i, column=9).value)
exData["param10"] = float(sheet.cell(row=i, column=10).value)
exDatas.append(exData)
每次在循环中都要重置exData
#outside loop
exData = {}
也许您可以使用i作为键保存在dict中,或者使用其他数据结构,如list和append
#your loop
exData[i] = {"param1": sheet.cell(row=i, column=1).value}
每次通过循环时,
i
设置为3、4、5,您都在将对应行中的数据存储在exData[“param1”]
等中。因此,第二次通过覆盖第一次,第三次通过覆盖第二次。这就是为什么字典只包含最后一行的值
仅初始化字典一次,并将行号作为字典键的一部分:
exData = {}
for i in range(3, lastRow):
exData[(i,"param1")] = sheet.cell(row=i, column=1).value
在循环的每次迭代中,都会覆盖字典(exData)中的值,如果希望字典中的每个值都是该列在三行中的值的列表,则需要将其重置为列表,然后追加这些列表
exData = {"param1":[], "param2":[], param3":[], "param4":[], "param5":[],
"param6":[], "param7":[], param8":[], "param9":[], "param10":[]}
for i in range(3, lastRow):
exData["param1"].append(sheet.cell(row=i, column=1).value)
exData["param2"].append(float(sheet.cell(row=i, column=2).value))
exData["param3"].append(float(sheet.cell(row=i, column=3).value))
exData["param4"].append(float(sheet.cell(row=i, column=4).value))
exData["param5"].append(float(sheet.cell(row=i, column=5).value))
exData["param6"].append(float(sheet.cell(row=i, column=6).value))
exData["param7"].append(float(sheet.cell(row=i, column=7).value))
exData["param8"].append(float(sheet.cell(row=i, column=8).value))
exData["param9"].append(float(sheet.cell(row=i, column=9).value))
exData["param10"].append(float(sheet.cell(row=i, column=10).value))
正如其他人所说,您需要在循环之外初始化字典,并使用.append。这似乎是我们做这件事的简明扼要的方法:
exData = {"param"+str(i+1):[]} for i in range(10)}
for i in range(3, lastRow):
exData["param1"].append(sheet.cell(row=i, column=1).value)
for j in range(9):
exData["param"+str(j+2)].append(float(sheet.cell(row=i, column=j+2).value))
这将覆盖EXDATA中的数据—永远不需要编写自己的循环<代码>工作表。iter\u行(最小行=3,最大列=10)是您想要的。还有一本字典。