我使用pydicom来读取dicom文件(病人名称),但我的所有dicom文件都名为i34、i67等(这些名称没有特定的顺序或顺序)。我的问题是:我在txt文件中有一个病人的名字列表,我希望搜索这个txt文件中的每个病人的名字和所有的dicom文件,查找他们在dicom文件中的PatientName (对于那些不熟悉的人,每个dicom文件都有很多病人的信息,其中一个是PatientName)。
例:
txt档案: John George Ringo Paul
Dicom文件: i54 i98 i64 i12
我想要的:带着约翰,搜索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个比赛的结果。出什么事了?
发布于 2017-07-05 03:20:56
问题在于逻辑(更确切地说,是缺乏逻辑)。
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老实说,我一开始就不知道出了什么问题。
发布于 2019-11-26 23:37:16
您也可以考虑从不同的角度来处理这个问题。您可以将您的DICOM文件组织成一个目录层次结构,其中包含一个级别的PatientName。这将简化相关文件的快速定位。一个可以帮助您完成此任务的脚本是二进位。
使用该工具,下面的命令将输入目录中的DICOM文件排序到PatientName > StudyDate > SeriesDescription-InstanceNumber命名目录结构中。我经常使用这类排序作为后续处理的先决条件。当然,如果您正在处理一个非常大的数据集,并且只需要访问其中的一小部分,这将是一个次优的解决方案,但我认为它可能对您的情况很方便。
dicomsort data sorted/%PatientName/%StudyDate/%SeriesDescription-%InstanceNumber.dcmhttps://stackoverflow.com/questions/44772145
复制相似问题