如何从多层子文件夹复制DICOM图像到公共文件夹并按规则重命名
DICOM图像批量复制重命名方案
修改要点
- 调整DICOM文件匹配规则为全递归匹配,无需固定目录层级,适配任意嵌套的文件夹结构
- 新增父目录名提取逻辑:直接取每个dcm文件所在的上一级目录(即你提到的患者专属唯一命名文件夹)作为文件名前缀
- 替换原脚本的
os.rename为shutil.copy2,实现文件复制而非移动,保留源文件不变同时保留文件元数据 - 新增目标目录自动创建逻辑,避免目标路径不存在时报错
- 重命名规则直接拼接「患者文件夹名_原文件名」,完全匹配你需要的命名格式
完整可运行代码
import glob import os import shutil # 源路径与目标路径定义 dir_src = r"/path/to/folder_with_subfolders/" dir_dst = r"/path/to/destination/" # 自动创建目标文件夹(如果不存在) os.makedirs(dir_dst, exist_ok=True) # 递归获取所有后缀为.dcm的文件 files = glob.glob(os.path.join(dir_src, '**/*.dcm'), recursive=True) for file in files: # 1. 获取原文件名,示例值:1.dcm base_filename = os.path.basename(file) # 2. 获取该dcm文件所在的父目录名,示例值:Subfolder_with_patientID1 patient_folder = os.path.basename(os.path.dirname(file)) # 3. 拼接成新文件名,示例值:Subfolder_with_patientID1_1.dcm new_filename = f"{patient_folder}_{base_filename}" # 4. 生成目标文件完整路径 dst_path = os.path.join(dir_dst, new_filename) # 5. 避免覆盖已存在的文件 if not os.path.exists(dst_path): # 复制文件,若需要移动源文件可替换为 os.rename(file, dst_path) shutil.copy2(file, dst_path)
可选优化
如果存在同一患者文件夹下有同名dcm的极端情况,可以在新文件名后添加时间戳/随机数后缀进一步避免重名。
内容的提问来源于stack exchange,提问作者shiva
相关产品推荐
相关产品推荐

