0

我无法将从 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' 对象不支持
索引

在处理上述异常的过程中,又出现了一个异常:

Traceback(最近一次调用最后一次):文件“C:\Users\dmgop\Personal\TE
Project - Pneumonia\detail_extraction.py”,第 14 行,在
writer.writerows(lung) 文件
“C:\Users\dmgop\AppData\ Local\Programs\Python\Python36\lib\site-packages\pydicom-1.2.0rc1-py3.6.egg\pydicom\dataelem.py",
第 346 行,在getitem
raise TypeError("DataElement value is unscriptable" TypeError: DataElement值无法编写脚本(不是序列)

4

1 回答 1

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())

查看 FileDataset 的Pydicom 文档,它是 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())

还可以查看本段最后一部分关于“with open() as”的使用

于 2019-01-16T07:57:16.003 回答