pydicom: аргумент dcm_read specific_taglist создает ошибку атрибута - PullRequest
0 голосов
/ 18 октября 2019

У меня есть дерево из четырех предметов и их DICOM-изображений. Вот пример структуры каталогов одного субъекта:

'C:\\DICOM_EXPORT\\four_de-id\\four_de-id\\100013\\100013\\*.dcm*'

Я создаю цикл, в котором я рекурсивно перебираю

C:\\DICOM_EXPORT\\four_de-id\\four_de-id\\

в каждом из четырехпапку субъекта и рекурсивно выберите один файл .dcm, затем примените pydicom.dcmread() к этому изображению и заполните инициализированный словарь dcm_read с идентификатором субъекта subject[38:44] в качестве ключа и содержимым определенных тегов DCM в качестве соответствующего значения каждого ключа. Теги находятся в списке, который я создал, и который называется TAGS (см. Ниже).

>>> print(TAGS)
['(0008,0008)', '(0008,0020)', '(0008,0060)', '(0008,0070)', '(0008,0080)', '(0008,0081)', '(0008,0090)', '(0008,009C)', '(0008,1010)', '(0008,1030)', '(0008,103E)', '(0008,1040)', '(0008,1090)', '(0010,1010)', '(0018,0050)', '(0018,0080)', '(0018,0081)', '(0018,0082)', '(0018,0087)', '(0018,0088)', '(0018,0089)', '(0018,0093)', '(0018,0094)', '(0018,1000)', '(0018,1020)', '(0018,1030)', '(0018,1250)', '(0018,1251)', '(0018,9041)', '(0018,9050)', '(0020,0011)', '(0020,0035)', '(0020,0037)', '(0028,0010)', '(0028,0011)', '(0028,0012)', '(0028,0030)']


dcm_read = {}

for i in subjects:
    os.chdir(i)
    dcm_image=glob.glob('*.dcm')
    for subject in subjects:
        dcm_read.update({subject[38:44]:pydicom.dcmread(fp=dcm_image, specific_tags=TAGS)})

Аргумент specific_tags из pydicom.dcmread(), по-видимому, является местом возникновения ошибки (см. Ниже).

Traceback (most recent call last):
  File "<input>", line 5, in <module>
  File "C:\Users\Isabel Wingert\Anaconda3\envs\DCM_EXPORT\lib\site-packages\pydicom\filereader.py", line 850, in dcmread
    force=force, specific_tags=specific_tags)
  File "C:\Users\Isabel Wingert\Anaconda3\envs\DCM_EXPORT\lib\site-packages\pydicom\filereader.py", line 651, in read_partial
    preamble = read_preamble(fileobj, force)
  File "C:\Users\Isabel Wingert\Anaconda3\envs\DCM_EXPORT\lib\site-packages\pydicom\filereader.py", line 589, in read_preamble
    preamble = fp.read(128)
AttributeError: 'list' object has no attribute 'read'

Однако в документации pydicom указано, что аргументом для specific_taglist может быть список элементов. Кто-нибудь когда-нибудь сталкивался с этой проблемой? Или я должен настроить свой список TAGS по-другому?

Ответы [ 2 ]

1 голос
/ 18 октября 2019

glob.glob('*.dcm') возвращает список, но pydicom.dcmread ожидает путь к аргументу fp.

Если вы ожидаете только один файл .dcm в каталоге, то вы можете решить проблему с помощью индексациисписок файлов .dcm, возвращаемых glob.glob:

dcm_read.update({subject[38:44]:pydicom.dcmread(fp=dcm_image[0], specific_tags=TAGS)})
0 голосов
/ 18 октября 2019
for i in subjects:
    os.chdir(i)
    dcm_image=glob.glob('*.dcm')
    for subject in subjects:
          path=str(subject+"\\"+dcm_image[0])
          dcm_read.update({subject[38:44]:pydicom.dcmread(fp=path, specific_tags=TAGS)})

Я воспользовался предложением «свой парень», добавив переменную path, а затем установив ее в качестве аргумента fp. но теперь возникает ошибка типа:

Traceback (most recent call last):
  File "<input>", line 6, in <module>
  File "C:\Users\Isabel Wingert\Anaconda3\envs\DCM_EXPORT\lib\site-packages\pydicom\filereader.py", line 850, in dcmread
    force=force, specific_tags=specific_tags)
  File "C:\Users\Isabel Wingert\Anaconda3\envs\DCM_EXPORT\lib\site-packages\pydicom\filereader.py", line 728, in read_partial
    specific_tags=specific_tags)
  File "C:\Users\Isabel Wingert\Anaconda3\envs\DCM_EXPORT\lib\site-packages\pydicom\filereader.py", line 363, in read_dataset
    raw_data_element = next(de_gen)
  File "C:\Users\Isabel Wingert\Anaconda3\envs\DCM_EXPORT\lib\site-packages\pydicom\filereader.py", line 117, in data_element_generator
    tag = Tag(tag_for_keyword(tag))
  File "C:\Users\Isabel Wingert\Anaconda3\envs\DCM_EXPORT\lib\site-packages\pydicom\tag.py", line 114, in Tag
    if long_value > 0xFFFFFFFF:
TypeError: '>' not supported between instances of 'NoneType' and 'int'
...