使用pydicom处理dcm文件提取信息并存储在csv

使用pydicom处理dcm文件提取信息并存储在csv

  • 使用pydicom

使用pydicom

#! /usr/bin/env python
# _*_  coding:utf-8 _*_
import pydicom as dicom
import csv
import codecs
import os
import re

#需要遍历的目录
DATA_PATH = 'C:\\Users\\admin\Desktop\\level2\\'
#提取的字段
list=['PatientID', 'PatientAge', 'PatientSex', 'KVP', 'PixelSpacing', 'SliceThickness',
     'Modality', 'Manufacturer', 'PatientName', 'XRayTubeCurrent', 'BodyPartExamined', 'Columns',
     'Rows', 'WindowCenter', 'WindowWidth']
#用来存储字段对应代码
list1=[]
#判断是否存储字段对应代码
flag1 = 0

def getfile(DATA_PATH):
    global flag1
    #定义csv文件路径
    csvFile = codecs.open('D:\\1.csv', 'w', encoding='GBK')
    writer = csv.writer(csvFile)
    #写入标题
    writer.writerow(list)
    #遍历目录
    for root,dirs,files in os.walk(DATA_PATH):
        for file in files:
            if 'dcm' in file:
                filepath=os.path.join(root,file)
                ret=getinfomation(filepath)
                if flag1==0:
                    writer.writerow(list1)#写入对应编号
                    #global flag
                    flag1=1
                writer.writerow(ret)
                break
    csvFile.close()

#通过文件路径获取字段
def getinfomation(path):
    #使用dicom读取文件信息
    information = dicom.read_file(path)
    print(path)
    ds=information
    tmp=[]
    for i in range(0,len(list)):
        #读取字段 做异常处理
        try:
            val = str(ds.data_element(list[i]).value)
        except:
            val="null"
        tmp.append(str(val))
        #print(list[i])
        #print(ds.data_element(list[i]))
        #print(str(ds.data_element(list[i])))
        if flag1==0:
            list1.append(re.match('\(.*\)',str(ds.data_element(list[i]))).group())
    tmp.append(str(path))  #增加存储路径
    return tmp



if __name__ == '__main__':
    getfile(DATA_PATH)
    #filepath = "C:\\Users\\admin\\Desktop\\level2\\468379524.dcm"
    #getinfomation(filepath)

你可能感兴趣的:(编程开发)