使用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
相关产品推荐
相关产品推荐

