【问题标题】:Can't write details extracted from DICOM file to csv file无法将从 DICOM 文件中提取的详细信息写入 csv 文件
【发布时间】:2019-01-16 04:18:20
【问题描述】:

我无法将从 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
return self.value[key] TypeError: 'PersonName3' 对象不支持
索引

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

Traceback(最近一次通话最后一次):文件“C:\Users\dmgop\Personal\TE
项目 - 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 value is unscriptable (not a Sequence)

【问题讨论】:

  • 可以提供patientdata.csv文件吗?

标签: python csv dicom pydicom


【解决方案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'的使用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    相关资源
    最近更新 更多