Interate dicom文件

时间:2017-06-27 04:12:19

标签: python pydicom

我使用pydicom来读取dicom文件(患者姓名),但我所有的dicom文件都是名称为i34,i67等等(这些名称没有特定的顺序或顺序)。 我的问题:我有一个txt文件中的患者姓名列表,我希望在这个txt文件中搜索所有dicom文件中的每个患者姓名,在dicom文件中查找他们的PatientName(对于那些不熟悉的人,每个dicom文件有一些患者的信息,其中一个是PatientName)

例:

txt文件: 约翰 乔治 林戈 保罗

Dicom文件: I54 I98 I64 I12

我想要的: 拿John并搜索i54,i98,i64,i12以获得PatientName匹配。并为txt文件中的每个名称执行此操作。希望我清楚自己。提前问好!

修改

我尝试使用此代码但没有工作

import dicom
import os

dir = "/path/to/dir_where_dicom_file_are"
txt = open('/path/to/txt_with_patientsnames.txt','r')
for line in txt:
    for sub, dirs, files in os.walk(dir):
        names = line.strip()
        for dcm in files:
           ds = dicom.read_file(dir+dcm) #necessary for read dicom files                            
           patient = ds.PatientName
           if names in patient:
           #do something

我拍了20张dicom图像的样本和20个名字的样本。我知道这个样本中只有一个dicom文件属于一个患者名称,所以我的输出应该只有一个匹配?但我得到了20个匹配结果。怎么了?

2 个答案:

答案 0 :(得分:0)

问题是逻辑(更具体地说是缺乏逻辑)

dir = "/path/where/dcm/files/are"
arq = open('path/where/file with pacient names are/patient.txt','r')
for linha in arq:
     c = linha.strip()
     for sub,p,a in os.walk(dir):
        for dcm in a:
          ds = dicom.read_file(dir+dcm)
          pctname = ds.PatientName           
          if c in pctname:
          #do something

说实话,我首先不知道出了什么问题。

答案 1 :(得分:0)

您还可以考虑从另一个角度解决这个问题。您可以将DICOM文件组织到一个目录层次结构中,该目录层次结构包括一个级别的PatientName。这将简化快速查找相关文件的过程。 dicomsort是一个可以帮助您完成此任务的脚本。

使用该工具,下面的命令会将输入目录中的DICOM文件排序为PatientName> StudyDate> SeriesDescription-InstanceNumber命名的目录结构。我经常使用这种排序作为后续处理的前提。当然,如果您使用的是非常大的数据集,并且只需要访问其中的一小部分,这将是次优的解决方案,但我认为这可能对您的情况很方便。

dicomsort data sorted/%PatientName/%StudyDate/%SeriesDescription-%InstanceNumber.dcm