对于范围内的i,只使用最后一行openpyx

2024-09-28 05:17:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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, 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。所以设置正确,但可能保存不正确?有什么想法吗?在


Tags: 代码inforvaluecellrangecolumnfloat
3条回答

每次在i设置为3、4、5的情况下执行循环时,都会将来自相应行的数据存储在exData["param1"]等中。因此第二次through覆盖第一次,第三次through覆盖第二次。这就是为什么你的字典只包含最后一行的值。在

只初始化字典一次,并使行号成为字典键的一部分:

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))

您正在为每个循环初始化字典。请在for循环外初始化字典。或者可以使用list存储每个字典,使用以下代码。在

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)

相关问题 更多 >

    热门问题