Как последовательно записывать определенные дочерние элементы корневого XML в новый файл, Python

#python #xml #elementtree

#python #xml #elementtree

Вопрос:

Я начинаю с большого XML-файла и пытаюсь создать новый файл только с теми элементами, которые мне нужны (один из них содержит определенный серийный номер). У меня почти все работает, единственная проблема заключается в том, что, когда я иду записывать элементы в новый файл, кажется, что он снова и снова перезаписывает себя, и в итоге я получаю только последний элемент, напечатанный в файле. Как я могу сделать так, чтобы при записи следующего элемента в файл он запускался после предыдущего? Я думаю о каком-то количестве строк и вставке, я просто не знаю, как это отформатировать.

Вот мой цикл, который находит нужные мне элементы и записывает их в файл:

 for child in root:
    for element in child:
        if element.tag == 'DeviceId':
            if element.text == 'NS-00-00000':
                f = open('new_3.log','w')
                p = (ET.tostringlist(child, encoding='unicode', pretty_print=True))
                print(p)
                f.write('n'.join(p))
                f.close()
 

Спасибо!

Комментарии:

1. Откройте файл перед запуском цикла и закройте его после завершения цикла.

2. как и во всем пути снаружи к оператору top for? Должен ли я закрыть его в цикле или удалить? Спасибо

3. Да, перед самым внешним for циклом. И закройте его после завершения этого цикла.

4. Спасибо, что сработало! Не могли бы вы объяснить, почему это все исправляет?

5. Открытие файла в 'w' режиме mode уничтожает существующее содержимое. Итак, вы хотите сделать это только один раз.