ディレクトリを再帰的に検索して dicom 情報を得る python

あるディレクトリを再帰的に検索して dicom ファイルのタグ情報を 2 次元配列にします。

dcm4chee で処理されたファイルは拡張子がないのですが、ディレクトリ内には dicom ファイルしか存在しないので、再帰的に検索されたファイルだけを処理するようになっています。


import pydicom
import os

class Dicom:

    def getDicomArr( self, sd ):       
        DicomArr = []
        for root, dir, files in os.walk( sd ):
            for file_ in files:
                full_path = os.path.join(root, file_)
                DicomArr.append( full_path )                           
        return DicomArr 
    
    def getDicomInfo( self, dcmArr ): 
        dcmInfoArr = []
        studyIDArr =[]
        for eachFile in dcmArr:
            ds = pydicom.read_file(eachFile)
            studyID = ds[0x0020, 0x0010].value
            if studyID not in studyIDArr:
                studyDate = ds[0x0008, 0x0020].value
                studyTime = ds[0x0008, 0x0030].value
                modality = ds[0x0008, 0x0060].value
                try: 
                    studyDscr = ds[0x0008, 0x1030].value 
                except:
                    studyDscr = ''  
                ptName = str(ds[0x0010, 0x0010].value).replace('^', ' ')
                karteNo = ds[0x0010, 0x0020].value
                sex = ds[0x0010, 0x0040].value
                birthday = ds[0x0010, 0x0030].value
                age = ds[0x0010, 0x1010].value
                institution = ds[0x0008, 0x0080].value                       
                thisLineInfo = [ studyID, studyDate, studyTime, modality, studyDscr, ptName, karteNo, birthday, sex, age, institution ] 
                dcmInfoArr.append( thisLineInfo ) 
                studyIDArr.append( studyID ) 
        return dcmInfoArr

if __name__ == "__main__":
    dcm = Dicom()
    dcmArr = dcm.getDicomArr( '/var/www/html/DICOM/2017/12/18' )
    infos = dcm.getDicomInfo( dcmArr )
    print( infos )

結果は


[
['6662', '20171218', '115226', 'CT', 'Chest', 'HOGE', '21202690', '19391224', 'M', '077Y', 'SOME HP'], 
['6660', '20171218', '101714', 'CT', 'Chest', 'HENO', '4700320', '19340413', 'M', '083Y', 'SOME HP'], 
['6661', '20171218', '102842', 'CT', 'Chest', 'MOHENO', '20302361', '19540118', 'F', '063Y', 'SOME HP'], 
['6659', '20171218', '094415', 'CT', 'Chest', 'FOO', '21702386', '19441212', 'F', '073Y', 'SOME HP'], 
['6663', '20171218', '163328', 'CT', 'Abdomen', 'BOO', '20800293', '19671016', 'M', '050Y', 'SOME HP']
]

解説

あるディレクトリを再帰的に検索してすべてのファイルを配列化するのは、


    def getDicomArr( self, sd ):       
        DicomArr = []
        for root, dir, files in os.walk( sd ):
            for file_ in files:
                full_path = os.path.join(root, file_)
                DicomArr.append( full_path )                           
        return DicomArr