使用pydicom处理dcm文件提取信息并存储在csv
使用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)
版权声明:本文为qq_43645782原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。