You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:36:16