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

将包含numpy数组的dict写入CSV后,如何还原得到原始dict

解决方案

场景1:已有生成的CSV文件,需要还原原始dict

你当前CSV中存储的是numpy数组的repr字符串,可以通过ast.literal_eval配合numpy构造函数解析,操作步骤如下:

  • 导入所需依赖:
import csv
import ast
import numpy as np
  • 读取解析代码:
rebuild_dict = {}
# 定义解析时允许识别的关键字,适配numpy数组的repr格式
eval_globals = {
    'array': np.array,
    'float32': np.float32,
    # 如有其他数据类型可在此补充,比如float64、int32等
}

with open('file.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        # 转换第一列的数值键为int类型
        key = int(row[0])
        # 解析第二列的字典字符串
        value_dict = ast.literal_eval(row[1], globals=eval_globals)
        rebuild_dict[key] = value_dict

注意:ast.literal_eval仅会解析字面量结构,不会执行恶意代码,安全性远高于原生eval,自有生成的CSV可以放心使用


场景2:调整存写逻辑,避免后续解析麻烦

你之前直接把嵌套字典转字符串存CSV的方式本身不符合CSV规范,推荐两种更可靠的实现方案:

方案A:保留CSV格式,调整存储结构

把数组展开存储,兼容其他CSV工具的读取需求:

# 存写代码
import csv
import numpy as np

with open('file.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    # 写入表头
    writer.writerow(['xplane', 'field', 'array_data'])
    for xplane, field_dict in dict_data.items():
        for f_name, arr in field_dict.items():
            # 把numpy数组转成逗号分隔字符串存储
            arr_str = ','.join(map(str, arr.tolist()))
            writer.writerow([xplane, f_name, arr_str])

# 读取还原代码
rebuild_dict = {}
with open('file.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        xplane = int(row['xplane'])
        f_name = row['field']
        arr = np.array(list(map(float, row['array_data'].split(','))), dtype=np.float32)
        if xplane not in rebuild_dict:
            rebuild_dict[xplane] = {}
        rebuild_dict[xplane][f_name] = arr

方案B:使用专用序列化工具,无兼容性问题

如果不需要用其他工具打开文件,直接用pickle序列化更简单,还原后和原始数据100%一致:

# 存写代码
import pickle

with open('data.pkl', 'wb') as f:
    pickle.dump(dict_data, f)

# 读取还原代码
with open('data.pkl', 'rb') as f:
    rebuild_dict = pickle.load(f)

内容的提问来源于stack exchange,提问作者ATK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:45:05