遍历.mcool多分辨率文件时出现'Is not an HDF5 file'错误求助
问题解决:遍历.mcool文件执行cooler balance时的HDF5文件错误
错误原因
报错OSError: 'input/*.mcool' is not an HDF5 file的核心原因是shell通配符未被正确展开:当input目录下没有匹配的.mcool文件,或者当前使用的shell不支持通配符展开时,input/*.mcool会被当作字面量文件名传递给cooler ls,而这个字符串显然不是有效的HDF5文件。
解决方案
修改脚本,加入通配符处理逻辑,确保只有真实存在的.mcool文件才会被处理:
#!/bin/bash # 开启nullglob选项:通配符匹配不到文件时,展开为空而非保留字面量 shopt -s nullglob for mcool_file in input/*.mcool; do # 额外校验:确保当前变量指向的是真实文件 if [[ -f "$mcool_file" ]]; then while IFS= read -r id; do # 用双引号包裹变量,避免文件名含空格等特殊字符时出错 cooler balance "$id" done < <(cooler ls "$mcool_file") fi done
关键说明
shopt -s nullglob:这是bash的内置选项,开启后如果通配符没有匹配到任何文件,会直接展开为空字符串,循环不会执行,避免把input/*.mcool当作文件名传递。- 双引号包裹变量:确保文件名包含空格、特殊字符时,
cooler能正确识别完整路径。 - 文件存在校验:作为额外保险,避免意外处理非文件类型的路径(比如目录)。
验证步骤
- 先确认
input目录下确实存在.mcool文件:执行ls input/*.mcool,如果能列出文件,说明通配符可以正常展开。 - 单独测试修改后的脚本,或者先拿单个文件验证逻辑:
cooler ls input/你的文件名.mcool,确保能正常输出分辨率路径,再执行cooler balance测试单个分辨率。
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

