我使用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个匹配结果。怎么了?
答案 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