데이터 꿈나무

[Python_ts1] os.path.split과 os.path.spiltext 알기 본문

Activity/Intern

[Python_ts1] os.path.split과 os.path.spiltext 알기

ye_ju 2023. 10. 1. 15:45

안녕하세요~! 오늘은 os.path로 파일 경로 다루는 법을 포스팅 해보려고 해요. 

저도 os는 많이 다뤄보지 않아서 자세한 내용은 몰랐는데, 이번에 인턴하면서 알게 되어서 공부 겸 포스팅하려고 합니다ㅎㅎ

도움이 되셨으면 좋겠어요!


우선, 저는 의료 데이터인 dicom파일을 이용해서 파일을 다뤄볼텐데요,

dicom파일은 간단히 말하면 의료 이미지 및 데이터를 저장하기 위한 표준 포맷 및 통신 프로토콜을 지칭하는 용어입니다. dicom에 대해 더 궁금하신 분은 아래 '더보기'를 클릭해주세요..!

 

더보기

DICOM은 "Digital Imaging and Communications in Medicine"의 약자로, 의료 이미지 및 관련 데이터를 저장, 표현 및 교환하기 위한 표준 포맷 및 통신 프로토콜을 지칭하는 용어입니다. DICOM은 의료 분야에서 다양한 형식의 의료 이미지 및 정보를 저장하고 공유하는 데 사용되며, 이러한 이미지는 주로 X-ray, CT 스캔, MRI, 초음파 및 기타 의료 영상 검사에 관련됩니다.

 

DICOM 표준은 의료 이미지와 관련된 다양한 정보를 포함하는 파일 형식 및 통신 프로토콜을 정의하고 있습니다. DICOM 파일은 픽셀 데이터뿐만 아니라 환자 정보, 의료 이미지의 취득 및 처리에 대한 정보, 이미지의 공간적 및 시간적인 관계 등 다양한 메타데이터를 포함할 수 있습니다.

 

DICOM은 의료 이미지를 기기 간에 안전하게 전송하고 저장하며, 다른 의료 시스템 및 의료 정보 시스템과 통합하는 데 필수적입니다. 의사, 방사선사, 병원 정보 시스템 관리자 및 의료 기기 제조업체 등 다양한 의료 분야의 전문가들이 DICOM을 사용하여 의료 이미지와 정보를 공유하고 협업합니다.

 

DICOM은 전 세계적으로 표준으로 인정받고 있으며, 의료 분야에서 이미지 및 정보의 표준화와 통합을 촉진하고 있습니다.

 

저희의 목표는 아래 사진과 같이 파일의 이름과 dicom 데이터 속 manufacturer정보를 긁어와서 테이블로 만드는 것이 목표입니다.

 


 

 

저는 dicom데이터를 다운 받아놓은 것이 있어서 바로 os활용법에 대해서 알려드릴게요. 

필요한 모듈을 임포트 해줍니다.

from pydicom.data import get_testdata_file
import pydicom
import numpy
from glob import glob
import os

 

filepath를 설정해주고,

glob함수를 이용해서 파일 경로를 검색해줍니다. 주어진 경로에서 특정 확장자(.dcm)를 가진 모든 파일의 목록을 반환합니다.

따라서, 주어진 경로 패턴에 일치하는 파일들의 리스트를 반환합니다.

//10.50.10.178/mnt/car/LAAo/data/ 내에서 확장자가 .dcm인 모든 파일을 찾고 목록으로 반환합니다.

(dicom파일은 .dcm으로 파일이 구성되어 있어, 해당 경로에서 dicom파일만 가져올 수 있습니다.

filepath = '//10.50.10.178/mnt/car/LAAo/data'
dicomlist = glob(r'//10.50.10.178/mnt/car/LAAo/data/*.dcm') 

dicomlist

실행 결과

 

📌 os.path.split

     (경로, 마지막 파일.확장자)

     ex. ( '//10.50.10.178/mnt/car/LAAo/data', 'CA_201215.dcm')

    ➡️ 해당 경로의 dicom파일을 경로와 파일을 분리해서 가져올 수 있습니다.

 

📌 os.path.splitext

     (확장자 분리)

     ex. ( '//10.50.10.178/mnt/car/LAAo/data\\CA_201215', '.dcm ')

    ➡️ 해당 경로의 파일과 확장자를 분리해서 가져올 수 있습니다.

 

 

그러면 dicomlist[0]을 하면 뭐가 나올까요?

 '//10.50.10.178/mnt/car/LAAo/data\\CA_201215.dcm' 이 나오겠죠?

 

os.path.split(dicomlist[0])[1]을 한다면?

'CA_201215.dcm' 이 나오겠죠?

 

os.path.splitext(os.path.split(dicomlist[0])[1])[0]을 한다면?

파일명과 확장자 분리이니까, 분리 한 후 인덱스 0번째인 

'CA_201215' 이 나올겁니다.

 

이 과정을 반복문을 사용해서 '파일의 이름' 정보를 뽑아 올겁니다.

#dicomlist[0]
#os.path.split(dicomlist[0]) - > /마지막 파일.확장자
#os.path.splitext(dicomlist[0]) -> 확장자 분리
'''
os.path.splitext(
    os.path.split(dicomlist[0])[1]
                 )[0]
'''

namelist = [os.path.splitext(
    os.path.split(i)[1]
                 )[0] for i in dicomlist]

print(namelist)

 

다음은 manufacturer 정보를 뽑아오는 코드입니다. 

manufacturer_list = [pydicom.dcmread(i).Manufacturer for i in dicomlist]

#[i for i in dicomlist] -> i= '//10.50.10.178/mnt/car/LAAo/data\\CA_201215.dcm', .....
#[pydicom.dcmread(i) for i in dicomlist] -> pydicom.dcmread(i) -> ds
#[pydicom.dcmread(i).Manufacturer for i in dicomlist] -> pydicom.dcmread(i).Manufacturer -> ds.Manufacturer

print(manufacturer_list)

위의 코드들을 실행하면 다음과 같은 결과가 나옵니다. (namelist, manufacturer_list 결과)

 

 

테이블 형태로 만들어주기 위해 pandas를 사용합니다.

# namelist : 데이터 이름
# manufacturer_list : Manufacturer 정보

import pandas as pd

table = pd.DataFrame({'namelist': namelist, 'manufacturer_list' : manufacturer_list})
table

결과 :

 

 


Comments