KeyError из-за отсутствия тега при преобразовании DCM в CSV - PullRequest
1 голос
/ 14 марта 2020

Буду признателен за вашу помощь в этом. Я хочу преобразовать DCM в CSV, вот код, который я пробую

PathDicom = "path image"
dicom_image_description = pd.read_csv("dicom_image_description.csv")
# Specify the .dcm folder path
folder_path = PathDicom
images_path = os.listdir(folder_path)
# Patient's information will be stored in working directory #'Patient_Detail.csv'
with open('Patient_Detail.csv', 'w', newline ='') as csvfile:
    fieldnames = list(dicom_image_description["Description"])
    writer = csv.writer(csvfile, delimiter=',')
    writer.writerow(fieldnames)
    for n, image in enumerate(images_path):
        ds = dicom.dcmread(os.path.join(folder_path, image))
        rows = []
        for field in fieldnames:
            if ds.data_element(field) is None:
                rows.append('')
            else:
                x = str(ds.data_element(field)).replace("'", "")
                y = x.find(":")
                x = x[y+2:]
                rows.append(x)
        writer.writerow(rows)

и результат

if ds.data_element(field) is None:

    return self[tag]

    data_elem = self._dict[tag]
KeyError: (0008, 0064)

, так что мне делать?

Заранее спасибо за Ваша помощь в этом вопросе.

1 Ответ

4 голосов
/ 14 марта 2020

Вы столкнетесь с проблемами с наивным преобразованием, потому что вам может потребоваться обработать элементы sequence (представьте, что набор данных представляет собой древовидную структуру данных) и необработанные данные для элементов с байтовыми VR как OB, OD, OF, OL, OW (см. здесь ). Однако, если все, что вас волнует, это элемент верхнего уровня набора данных:

# Make sure that `fieldnames` is a list of element tags
for tag in fieldnames:
    if tag not in ds:
        writer.writerow('')
        continue

    elem = ds[tag]
    # Parse elem however you wish, watch out for elements with a byte VR though!
    value = elem.value
    if isinstance(value, bytes):
        value = "Binary data of length {}".format(elem.length)
    row = "{}, {}, {}".format(elem.tag, elem.VR, value)
    writer.writerow(row)
...