指定Windows路径读取DICOM文件时遇FileNotFoundError求助
排查DICOM文件存在却触发FileNotFoundError的问题
我来帮你拆解这个看似矛盾的问题——明明os.listdir能看到DICOM文件,同一目录的CSV也能正常读取,但dcmread就是报文件找不到,大概率是文件名隐形差异或者路径处理的细节坑,咱们一步步验证:
1. 优先排查:文件名是否存在不可见字符/输入误差
你手动写的DICOM文件名看起来和目录里的一致,但很可能存在肉眼无法分辨的差异(比如全角/半角符号、空格、不可见控制字符)。建议用代码打印文件名的字符编码,对比实际文件和你手动输入的差异:
# 打印目录中所有文件的字符编码 for fname in os.listdir(path): print(f"文件名: {fname}") print(f"字符编码: {[ord(c) for c in fname]}\n") # 打印你手动拼接的文件名的字符编码 target_fname = '1.2.276.0.7230010.3.1.4.8323329.300.1517875162.258081.dcm' print(f"手动输入的文件名编码: {[ord(c) for c in target_fname]}")
如果编码列表不一致,说明文件名存在隐形差异,此时不要手动输入文件名,直接用os.listdir返回的结果拼接路径:
# 自动获取目录中的DICOM文件 dcm_files = [f for f in os.listdir(path) if f.lower().endswith('.dcm')] if dcm_files: yy = os.path.join(path, dcm_files[0]) ds = dicom.dcmread(yy) else: print("目录中未找到DICOM文件")
2. 检查文件权限与系统锁定
虽然CSV能正常读取,但DICOM文件可能被其他程序锁定(比如刚用医学影像软件打开过未关闭),或者存在特殊权限设置:
- 右键DICOM文件,查看「属性」-「安全」,确认当前用户有读取权限
- 关闭所有可能打开该文件的程序(包括资源管理器的预览窗口),再重试读取
3. 验证路径的绝对正确性
用os.path.abspath打印拼接后的完整路径,复制到Windows资源管理器中打开,确认路径是否真的指向目标文件:
print(os.path.abspath(yy))
如果资源管理器能打开,但dcmread仍报错,可能是Windows长路径限制问题——Windows默认不支持过长的路径,此时可以给路径添加\\?\前缀来绕过限制:
long_path = r'\\?\D:\REGI\siim\dicom-images-train\1.2.276.0.7230010.3.1.2.8323329.300.1517875162.258080\1.2.276.0.7230010.3.1.3.8323329.300.1517875162.258079\1.2.276.0.7230010.3.1.4.8323329.300.1517875162.258081.dcm' ds = dicom.dcmread(long_path)
4. 检查pydicom版本兼容性
旧版本的pydicom可能存在路径处理bug,建议升级到最新稳定版后重试:
pip install --upgrade pydicom
内容的提问来源于stack exchange,提问作者Regi Mathew
相关产品推荐
相关产品推荐

