2017-11-29 1 views
-2

엑셀 시트를 읽으려면 openpyxl을 사용하고 있습니다. 여기 내 문제 코드 :범위 내에서 그냥 마지막 행을 사용합니다 - openpyxl

변수 lastRow이 문제는 지금은 exData를 인쇄하면 그냥 다섯 번째 행의 값을 포함 6. 설정되어
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) 

. 내가 인쇄하면 3 4 5라고 표시됩니다. 그래서 올바르게 설정되었지만 제대로 저장되지 않았을 수 있습니까? 어떤 아이디어?

+0

자신 만의 루프를 작성할 필요가 없습니다. 'sheet.iter_rows (min_row = 3, max_col = 10)'이 당신이 원하는 것입니다. 그것과 사전의 이해력. –

답변

1

각 루프에 대해 사전을 초기화하고 있습니다. for 루프 외부에서 사전을 초기화하십시오. 또는 list를 사용하여 다음 코드를 사용하여 각 사전을 저장할 수 있습니다. 당신은 DICT에 저장하거나 목록 같은 다른 데이터 구조를 사용하고 단지 추가 할 exData에게 어쩌면

#outside loop 
exData = {} 

당신이 열쇠로 내가 사용할 수 있습니다 루프의 각 시간을 다시 설정하라는된다

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

이것은 exData의 데이터를 덮어 씁니다. – Wonka

0

#your loop 
exData[i] = {"param1": sheet.cell(row=i, column=1).value} 
1

i을 3, 4, 5로 설정하여 루프를 진행할 때마다 exData["param1"] 등의 해당 행에있는 데이터를 저장합니다. 두 번째로 첫 번째를 덮어 쓰면 첫 번째를 덮어 씁니다 세 번째는 두 번째를 덮어 씁니다. 그래서 사전에는 마지막 행의 값만 들어 있습니다.

한 번만 사전을 초기화하고, 사전 키의 행 번호 부분합니다

exData = {} 
for i in range(3, lastRow): 
    exData[(i,"param1")] = sheet.cell(row=i, column=1).value 
2

각을 원하는 경우, 루프의 각 반복에서 사전 (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)) 
0

다른 사람들도 말했듯이, 루프 외부에서 사전을 초기화하고 .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)) 
관련 문제