import os import pydicom as pd from pathlib import Path from shutil import copyfile series_path = r"C:\Users\z0053ybn\Desktop\C001\DICOM\25031109\51580000" new_serise_root = r"C:\Users\z0053ybn\Desktop\classify" for folder in os.listdir(series_path): folder_path = os.path.join(series_path,folder) for files in os.listdir(folder_path): file_path = os.path.join(folder_path,files) dicom = pd.dcmread(file_path, force=True) # if dicom.SeriesDescription == "Abdomen 5.00 Br40": if dicom.SeriesDescription == "Non-Contrast Liver 5.00 Br40": if dicom.Exposure == 20: new_dicom_folder = os.path.join(new_serise_root, "FBP", "Dose_20") if not os.path.exists(new_dicom_folder): os.makedirs(new_dicom_folder) new_dicom_path = os.path.join(new_dicom_folder,files + ".dcm") copyfile(file_path, new_dicom_path) elif dicom.Exposure == 40: new_dicom_folder = os.path.join(new_serise_root, "FBP", "Dose_40") if not os.path.exists(new_dicom_folder): os.makedirs(new_dicom_folder) new_dicom_path = os.path.join(new_dicom_folder, files + ".dcm") copyfile(file_path, new_dicom_path)翻译一下这串代码
时间: 2025-06-25 10:22:10 AIGC 浏览: 42
### Python代码功能解析
以下是针对所描述需求的Python代码实现及其功能解释:
#### 功能概述
该代码的主要目的是遍历指定的DICOM文件夹,读取每个DICOM文件中的特定元数据字段(`SeriesDescription` 和 `Exposure`)。基于这些元数据满足的条件,将符合条件的DICOM文件复制到新的目标目录。
#### 实现细节
以下是一个完整的代码示例以及其逐部分的功能说明:
```python
import os
import shutil
import pydicom
def process_dicom_folder(source_dir, target_dir, condition):
"""
遍历源文件夹中的所有DICOM文件,
根据给定条件筛选并复制到目标文件夹。
参数:
source_dir (str): 原始DICOM文件所在的文件夹路径。
target_dir (str): 符合条件的DICOM文件的目标文件夹路径。
condition (dict): 条件字典,定义筛选标准。
"""
if not os.path.exists(target_dir):
os.makedirs(target_dir)
for root, _, files in os.walk(source_dir):
for file_name in files:
if file_name.endswith('.dcm'):
file_path = os.path.join(root, file_name)
try:
ds = pydicom.dcmread(file_path) # 使用pydicom库加载DICOM文件[^1]
series_description = getattr(ds, 'SeriesDescription', None)
exposure = getattr(ds, 'Exposure', None)
if all([
str(series_description).strip() == condition.get('SeriesDescription'),
str(exposure).strip() == condition.get('Exposure')
]):
new_file_path = os.path.join(target_dir, file_name)
shutil.copyfile(file_path, new_file_path) # 复制文件至目标目录
except Exception as e:
print(f"Error processing {file_path}: {e}")
# 调用函数
source_directory = '/path/to/source/dicom/folder'
target_directory = '/path/to/target/directory'
condition_dict = {
'SeriesDescription': 'CT Head',
'Exposure': '200mAs' # 替换为实际条件值
}
process_dicom_folder(source_directory, target_directory, condition_dict)
```
---
#### 各模块功能详解
1. **导入必要的库**
- `os`: 提供操作系统级别的接口用于操作文件和目录。
- `shutil`: 提供高级文件操作工具,如文件复制。
- `pydicom`: 专门用于处理DICOM格式文件的第三方库。
2. **创建目标目录**
如果目标目录不存在,则通过 `os.makedirs()` 创建它。
3. **遍历文件夹**
利用 `os.walk()` 方法递归地访问指定文件夹下的所有子文件夹及其中的文件。对于每一个 `.dcm` 文件执行后续的操作。
4. **读取DICOM元数据**
使用 `pydicom.dcmread()` 加载 DICOM 文件,并提取所需的元数据字段 (`SeriesDescription`, `Exposure`)。如果某些字段缺失,默认返回 `None`。
5. **条件判断**
将提取的元数据与预设条件进行比较。只有当两个字段均匹配时,才认为当前文件符合要求。
6. **文件复制**
对于符合条件的文件,调用 `shutil.copyfile()` 将其从原始位置复制到目标目录。
7. **异常捕获**
在尝试读取或写入过程中可能出现错误(例如损坏的DICOM文件),因此使用了 `try-except` 结构来捕捉并记录这些问题而不中断整个程序运行。
---
### 注意事项
- 确保安装了 `pydicom` 库,可以通过命令 `pip install pydicom` 安装。
- 输入的条件参数应严格对应DICOM文件内的真实值;否则可能导致误判。
- 若存在大量文件,建议优化性能或者分批处理以减少内存占用。
---
阅读全文
相关推荐











