当我尝试从多个工作表向字典中添加数据时,openpyxl AttributeError

问题描述 投票:0回答:1

我想将 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)

python excel openpyxl
1个回答
0
投票

我试图理解(从你的代码)你的电子表格的确切格式以及你期望作为输出的最终字典。我想您期望一个字典,其中键是项目/字符串,值是整数/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)

一个变体,使用 :

#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]}

使用的输入:

© www.soinside.com 2019 - 2024. All rights reserved.