我想将 Excel 中的数据添加到字典中。但是当我使用 .append(total_sales) 时会出现错误,当然如果我这样做 +=total_sales 也没有问题,只是我获得的是总和而不是 3 个单独月份的数据。你能帮我找出代码中的错误吗?预先感谢
import openpyxl
#juste recuperer les valeurs pas les formules "data_only=True"
wb1 = openpyxl.load_workbook("octobre.xlsx", data_only=True)
wb2 = openpyxl.load_workbook("novembre.xlsx", data_only=True)
wb3 = openpyxl.load_workbook("decembre.xlsx", data_only=True)
def add_data_from_wb(wb, data):
sheet = wb.active
for row in range(2, sheet.max_row):
item = sheet.cell(row, 1).value
if not item:
break
total_sales = sheet.cell(row, 4).value
if data.get(item):
data[item].append(total_sales)
else:
data[item] = total_sales
data_dict = {}
add_data_from_wb(wb1, data_dict)
add_data_from_wb(wb2, data_dict)
add_data_from_wb(wb3, data_dict)
print(data_dict)
我试图理解(从你的代码)你的电子表格的确切格式以及你期望作为输出的最终字典。我想您期望一个字典,其中键是项目/字符串,值是整数/total_sales 列表。
我可以重现你的
AttributeError: 'int' object has no attribute 'append'
,那是因为你正在使用整数值而不是整数列表启动一个字典。这可以通过使用 data[item] = [total_sales]
来解决。
您也可以简单地输入您的代码:
from openpyxl import load_workbook
from collections import defaultdict
l = ["octobre.xlsx", "novembre.xlsx", "decembre.xlsx"]
def add_data_from_wbs(files):
data = defaultdict(list)
for f in files:
sheet = load_workbook(f, data_only=True).active
for row in range(2, sheet.max_row+1):
item = sheet.cell(row, 1).value
total_sales = sheet.cell(row, 4).value
data[item].append(total_sales)
return dict(data)
d = add_data_from_wbs(l)
一个变体,使用 pandas:
#pip install pandas
import pandas as pd
d = (
pd.concat([pd.read_excel(f, header=None, skiprows=1) for f in l])
.groupby(0)[3].agg(list).to_dict()
)
输出:
print(d) #{'Item1': [100, 300], 'Item2': [200], 'Item3': [300, 500, 400]}
使用的输入: