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

使用uproot写入string至ROOT文件时遇Awkward Array错误求助

使用uproot写入string类型数据到ROOT文件时的TypeError解决方法

问题描述

尝试将string类型数据写入ROOT文件时触发错误:

TypeError: cannot write Awkward Array type to ROOT file:    46 * string

需求:从10个ROOT文件提取信息并合并到单个ROOT文件,已将提取的信息存储在列表中。

解决方案

1. 转换数据类型匹配ROOT要求

错误中的46 * string表示要写入的是固定长度为46的字符串数组,需将Python列表转换为uproot/ROOT可识别的字符串类型:

方法一:用Awkward Array转换

import awkward as ak
import uproot

# 假设字符串数据存在str_list中
# 转换为指定固定长度的Awkward Array字符串类型
str_array = ak.Array(str_list, with_name="string[46]")

# 写入合并后的ROOT文件
with uproot.recreate("merged_output.root") as output_file:
    output_file["merged_tree"] = {"extracted_strings": str_array}

方法二:用Numpy字符串数组

import numpy as np
import uproot

# 将列表转为固定长度的Numpy字符串数组(U46表示长度46的Unicode字符串)
str_array = np.array(str_list, dtype="U46")

# 写入合并后的ROOT文件
with uproot.recreate("merged_output.root") as output_file:
    output_file["merged_tree"] = {"extracted_strings": str_array}

2. 升级依赖包

旧版本uproot对字符串类型支持不完善,执行命令升级到最新版:

pip install --upgrade uproot awkward numpy

3. 校验数据结构

如果字符串数据是嵌套列表,需确保结构扁平且每个元素均为字符串类型,避免ROOT无法解析的嵌套结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:32:21