使用openpyxl从多Excel文件读取数据存入字典时遇AttributeError及数据汇总异常问题求助
使用openpyxl从多Excel文件读取数据存入字典时遇AttributeError及数据汇总异常问题求助
嗨,我看到你遇到的问题了,咱们一步步来拆解和解决它~
你现在碰到两个核心问题:一是用.append(total_sales)时会触发AttributeError,二是换成+=total_sales后,得到的是三个月的销售总和,而非每个月的独立数据。这两个问题其实根源是同一个——第一次给字典的键赋值时,你存的是单个数值,而不是列表类型。
错误原因拆解
- 当某个商品(item)第一次出现在Excel里时,你执行了
data[item] = total_sales,这时候data[item]是一个数值(比如整数或浮点数),而数值类型根本没有append()方法,所以后续再处理这个商品时,调用.append()自然会报错。 - 如果你换成
+=total_sales,本质是把两个数值相加,每次处理都会累加当前月份的销售额,最后得到的自然是三个月的总和,而非每个月的单独数据。
修正方案
我们需要确保字典中每个键对应的值始终是列表类型:
- 第一次遇到某个商品时,把当前月份的销售额放进一个新列表里,作为该键的值;
- 后续再遇到这个商品时,直接往对应的列表里追加新月份的销售额即可。
另外还要注意:原代码里函数定义后的代码没有缩进,这在Python里是语法错误,必须修正缩进才能正常运行。
修正后的完整代码
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): # 修复缩进:函数内的代码必须缩进,Python靠缩进识别代码块 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)
修改后,每个商品对应的字典值都会是一个列表,按顺序存放十月、十一月、十二月的销售数据,既不会报错,也能保留每个月的独立数据啦~
备注:内容来源于stack exchange,提问作者LetoD
相关产品推荐
相关产品推荐

