我正在编写一个代码来递归扫描任何给定的存储库,查找其中的所有 DICOM 文件,在 pydicom 的帮助下从文件中检索信息,并用它们执行进一步的操作(重命名、替换、使用所需信息制作数据框等) )
很快就发现,并非所有 DICOM 文件都具有 .DCM 或 .DCM30 扩展名。其中很多根本没有扩展名。 我如何识别这些特定文件是放射学研究,无论存储库如何,并将它们包含在循环中?
我已经尝试过:
for dcm_file in pathlib.Path(a).rglob('*.DCM') or pathlib.Path(a).rglob('*.DCM30'):
dcm_list.append(dcm_file.name)
ds = pydicom.read_file(dcm_file.absolute(),force=True)
name = ds.PatientName
name = str(name)
if name not in dcm_patients_names:
dcm_patients_names.append(name)
它识别了所有具有 .dcm 扩展名的文件,不幸的是,这大约是所需数据的 30%
John Gordon 建议的解决方案有效,现在代码尝试以大象的优雅方式打开每个文件
for dcm_file in pathlib.Path(InputPath).rglob('*'):
counter = counter + 1
try:
dcm = dcmread(str(dcm_file))
filesize = filesize + os.stat(dcm_file).st_size
patientsname = str(dcm.PatientName)
patientsname.replace(', ', '')
new_row = pd.DataFrame({'PatientName': [patientsname], 'DateOfBirth': [dcm.PatientBirthDate], 'StudyDate': [dcm.StudyDate], 'StudyDescription': [dcm.StudyDescription], 'Modality': [dcm.Modality]})
frames = [patients_df, new_row]
patients_df = pd.concat(frames, ignore_index=True)
except:
continue
非常感谢<3