我无法将从DICOM文件提取的详细信息写入CSV文件。这是我使用的代码-
import pydicom
import os
import pandas as pd
import csv
import glob
data_dir= 'C:\\Users\\dmgop\\Personal\\TE Project - Pneumonia\\stage_1_test_images_dicom'
patients= os.listdir(data_dir)
myFile= open('patientdata.csv','w')
for image in patients:
lung = pydicom.dcmread(os.path.join(data_dir, image))
print (lung)
writer = csv.writer(myFile)
writer.writerows(lung)
break
即将出现的错误如下-
跟踪(最近一次通话最近一次):文件“ C:\ Users \ dmgop \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ pydicom-1.2.0rc1-py3.6.egg \ pydicom \ dataelem.py”,
第344行,位于 getitem
返回self.value [key] TypeError:'PersonName3'对象不支持
索引
在处理上述异常期间,发生了另一个异常:
跟踪(最近一次通话最后一次):文件“ C:\ Users \ dmgop \ Personal \ TE
专案-Pneumonia \ detail_extraction.py“,第14行,在
writer.writerows(肺)文件
“ C:\ Users \ dmgop \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ pydicom-1.2.0rc1-py3.6.egg \ pydicom \ dataelem .py“,
第346行,位于 getitem
引发TypeError(“ DataElement值不可写” TypeError:DataElement值不可脚本(不是序列)
答案 0 :(得分:1)
假设for循环中的“ break”语句意味着您只需要第一张图像的信息,请尝试:
import pydicom
import os
import csv
data_dir = 'C:\\Users\\dmgop\\Personal\\TE Project-Pneumonia\\stage_1_test_images_dicom'
patients = os.listdir(data_dir)
with open('file.csv','w') as myfile:
writer = csv.writer(myFile)
# patients[0] means get the first filename, no need for the for loop
lung = pydicom.dcmread(os.path.join(data_dir, patients[0]))
print(lung.formatted_lines)
# pay attention to the function_call --> formatted_lines()
writer.writerows(lung.formatted_lines())
看看Pydicom docs for FileDataset,它是dcmread方法的返回类型。
如果要写入目录中所有文件的数据,请尝试以下操作:
import pydicom
import os
import csv
data_dir = 'C:\\Users\\dmgop\\Personal\\TE Project-Pneumonia\\stage_1_test_images_dicom'
patients = os.listdir(data_dir)
with open('file.csv','w') as myfile:
writer = csv.writer(myfile)
for patient in patients:
if patient.lower().endswith('.dcm'):
lung = pd.dcmread(os.path.join(data_dir, patient))
writer.writerows(lung.formatted_lines())
还可以看看this paragraph的最后一部分,关于“ with open()as”的使用