Radi_tech’s blog

Radiological technologist in Japan / MRI / AI / Deep learning / MATLAB / R / Python

【Python】DICOMデータをシーケンス名でフォルダ分け

DICOMデータをシーケンス名でフォルダ分けする。
DICOMデータはあらかじめフォルダごとに分けられているが、名前は降られていない状態。

import os 
ws = "work spaceのフォルダ名"
os.chdir(ws)


import shutil
import pydicom

fd_main = "DICOMデータが入っているフォルダ名"
fds = os.listdir(fd_main)
fds = [fd for fd in fds if not fd.startswith('.')]

fd_destination = "D:/MEGA\MEGAsync/ws_20240331_rename_folder/rename_head_MRI"

if not os.path.exists(fd_destination):
    os.mkdir(fd_destination)



for fd in fds:
    tmp_pt_fd = os.path.join(fd_main, fd)    
    fds_sq     = os.listdir(tmp_pt_fd)
    
    for fd_sq in fds_sq:
        tmp_sq_fd = os.path.join(tmp_pt_fd, fd_sq)
        
        fls = os.listdir(tmp_sq_fd)
        
        tmp_dcm_fl = os.path.join(tmp_sq_fd, fls[0])
        
        dcm = pydicom.dcmread(tmp_dcm_fl)
    
        sq_name = fd_sq + "_" + dcm.SeriesDescription
        
        # processing "T2*"
        if '*' in sq_name:
            sq_name = sq_name.replace("*", "_star_")
        
        new_sq_fd_name = os.path.join(fd_destination, fd, sq_name)
        
        # copy
        if not os.path.exists(new_sq_fd_name):
            shutil.copytree(tmp_sq_fd, new_sq_fd_name)
            print(f"Folder '{tmp_sq_fd}' copied to '{new_sq_fd_name}'.")
        else:
            print(f"Folder '{new_sq_fd_name}' already exists. Skipping copying.")
        
        
        
print("Processing finish")