整理dicom目录

# -*- coding=utf8 -*-
__author__ = 'ken'
import os
import pydicom
import shutil
class ArchiveDicomFile:

    @classmethod
    def judge_is_dicom_path(cls, dicom_file_path):
        if os.path.isfile(dicom_file_path):
            return True
        else:
            return False

    @classmethod
    def get_dicom_file_path(cls, file_path, dicom_path_list):
        if cls.judge_is_dicom_path(file_path):
            dicom_path_list.append(file_path)
        else:
            for file_name in os.listdir(file_path):
                new_file_path = os.path.join(file_path, file_name)
                cls.get_dicom_file_path(new_file_path, dicom_path_list)

    @classmethod
    def read_data_from_dicom(cls, dicom_path):
        dcm_info = {}
        try:
            dcm = pydicom.read_file(dicom_path)
            dcm_info['study_id'] = dcm.StudyInstanceUID
            dcm_info['series_id'] = dcm.SeriesInstanceUID
        except:
            os.remove(dicom_path)
        return dcm_info

    @classmethod
    def archive_dicom_file(cls, input_path, output_path):
        if not os.path.exists(output_path):
            os.makedirs(output_path)
        dicom_path_list = []
        cls.get_dicom_file_path(input_path, dicom_path_list)
        for dicom_path in dicom_path_list:
            dcm_info = cls.read_data_from_dicom(dicom_path)
            if len(dcm_info) > 0:
                series_path = os.path.join(output_path, dcm_info['study_id'], dcm_info['series_id'])
                if not os.path.exists(series_path):
                    os.makedirs(series_path)
                print('copy ', series_path)
                shutil.copy(dicom_path, series_path)
            else:
                pass


if __name__ == "__main__":
    input_path = r'C:\Users\ken'
    out_path = r'C:\Users\ken\test'
    ArchiveDicomFile.archive_dicom_file(input_path, out_path)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值