Python中持久化ArrayList后仅获取到最后一条记录的问题求助
问题解决:员工Excel数据加载与持久化
问题根源
你的代码在构建员工列表时,把每个员工的姓名和单独的字段详情扁平追加到同一个列表中,导致最终数据结构混乱(比如[姓名1, [Age,25], [Nationality,CN], 姓名2, ...]),而非每个员工作为独立条目存储。这会让你在打印时误以为只获取到最后一条记录,实际是结构错误导致数据展示异常。
修正后的代码
import numpy as np from openpyxl import load_workbook # 加载Excel文件 wb = load_workbook('Employees.xlsx') ws = wb.active row_count = ws.max_row column_count = ws.max_column # 获取表头(假设第一行是表头) headings = [ws.cell(1, col).value for col in range(1, column_count + 1)] def get_employee_list(): employee_list = [] # 遍历每一行员工数据(从第2行开始) for row in range(2, row_count + 1): employee = {} # 遍历每一列,填充员工信息 for col in range(1, column_count + 1): key = headings[col - 1] value = ws.cell(row, col).value employee[key] = value employee_list.append(employee) # 持久化数据到npy文件 np.save('employeeList.npy', employee_list, allow_pickle=True) return employee_list # 获取并持久化员工列表 employees_list = get_employee_list() # 直接从文件加载验证 loaded_employees = np.load('employeeList.npy', allow_pickle=True) # 打印所有员工数据 print(loaded_employees) # 打印单个员工详情 print(loaded_employees[0])
关键改进点
- 结构化存储:每个员工信息以字典形式存储,确保每条记录独立,数据结构清晰(比如
{'Name': '张三', 'Age': 28, 'Nationality': '中国'})。 - 简化表头获取:直接通过列索引遍历获取表头,避免复杂的列字母转换。
- 直接返回数据:函数执行时直接返回员工列表,无需先存再加载,同时保留持久化逻辑。
- 明确持久化参数:保存时添加
allow_pickle=True,确保字典对象能被正确序列化。
替代持久化方案(可选)
如果觉得numpy的object数组不够直观,也可以用Python内置的pickle模块直接保存列表:
import pickle # 保存 with open('employeeList.pkl', 'wb') as f: pickle.dump(employee_list, f) # 加载 with open('employeeList.pkl', 'rb') as f: loaded_employees = pickle.load(f)
内容的提问来源于stack exchange,提问作者JMon
相关产品推荐
相关产品推荐

