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

使用hadd合并含mc16、SUSY标识的ROOT文件时提示文件不存在如何解决

ROOT hadd通配符匹配失败问题解决方法

问题根源

报错的核心原因是mc16*SUSY*.root里的通配符*没有被正确解析展开,系统直接把带*的字符串当成了单个文件名去读取,自然找不到对应文件,常见触发场景有两个:

  1. 你的os.system()调用语法错误,没有把整段hadd命令封装为字符串传入
  2. 脚本执行的工作目录和root文件存放目录不一致,或者当前shell环境没有自动展开通配符

解决步骤

1. 先修正基础调用语法

你当前的os.system写法不符合Python语法要求,必须把整段hadd命令用引号包裹为字符串:

import os
# 注意整段命令放在双引号内部
os.system("hadd -f Combined_SUSY_SAMPLES.root mc16*SUSY*.root")

如果修正语法后仍然报错,用下面的稳妥方案规避通配符解析问题。

2. 用glob模块预匹配文件(最稳妥方案)

直接用Python的glob模块先匹配到所有符合要求的文件,再拼接进hadd命令,完全避免shell通配符解析异常:

import os
import glob

# 可选:先切换到root文件所在的目录,替换为你自己的文件路径
# os.chdir("/path/to/your/ntuple/directory")

# 匹配所有同时包含mc16和SUSY的root文件
input_files = glob.glob("mc16*SUSY*.root")

if not input_files:
    print("未匹配到任何符合要求的文件,请检查目录路径是否正确")
else:
    # 拼接完整的hadd命令
    cmd = f"hadd -f Combined_SUSY_SAMPLES.root {' '.join(input_files)}"
    os.system(cmd)

验证方法

你可以先直接在终端的root文件存放目录下执行hadd -f Combined_SUSY_SAMPLES.root mc16*SUSY*.root,确认命令本身可以正常运行,再排查Python脚本侧的路径、语法问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 11:24:01