Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 14, 2014 23:53:09

worsvch
Зарегистрирован: 2014-09-07
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при удалении узла xml

Подскажите, пожалуйста, как быть, при выполнении функции remove выходит ошибка,которую никак не удается победить:
ValueError: list.remove(x): x not in list

#!/python
# -*- coding: utf-8 -*-
import os
import glob
import csv
import xml.etree.ElementTree as xml
csvdata = 'Список запчастей.csv'
tag = 'zapchast'
zapchasty_list = []
# сохраняем запчасти в список
with open(csvdata,'r',newline='') as csvfile:
    zplist = csv.reader(csvfile,delimiter=';')
    for row in zplist:
        zapchasty_list.append(row[0])        
        
xmlfiles = glob.glob("*.xml")        
for xmlfile in xmlfiles:
    tree = xml.parse(xmlfile)
    root = tree.getroot()
    for obj in root.findall('.//Zapchast'):
        zpch = obj.get('InvNumber')
        if zpch in zapchasty_list:
            root.remove(obj)

Офлайн

#2 Ноя. 15, 2014 01:15:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9992
Репутация: +  857  -
Профиль   Отправить e-mail  

Ошибка при удалении узла xml

worsvch
'.//Zapchast'
Это поиск на любой глубине, тогда как root.remove() будет искать только среди прямых потомков.

Когда что-то непонятно, выполняй print() в промежутках, так как может получаться неожиданная структура документа.
Поэтому здесь тоже нужно всё проверить: сначала сразу после создания корневого узла вывести его на экран; затем отдельно root.findall() вывести на экран (чтобы убедиться, что находит правильно).



Отредактировано py.user.next (Ноя. 15, 2014 01:16:31)

Офлайн

#3 Ноя. 15, 2014 23:24:20

worsvch
Зарегистрирован: 2014-09-07
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при удалении узла xml

py.user.next
1. Корневой узел выходит верно
2. Это поиск на любой глубине, тогда как root.remove() будет искать только среди прямых потомков. - можно на примере, а то не совсем понятно

Офлайн

#4 Ноя. 16, 2014 03:15:17

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9992
Репутация: +  857  -
Профиль   Отправить e-mail  

Ошибка при удалении узла xml

>>> import xml.etree.ElementTree as ET
>>> 
>>> doc = ET.fromstring('<a><b><c></c></b></a>')
>>> doc
<Element 'a' at 0xb73c0dec>
>>> list(doc)
[<Element 'b' at 0xb73ea16c>]
>>> list(doc[0])
[<Element 'c' at 0xb73de694>]
>>>
>>> c = doc[0][0]
>>> c
<Element 'c' at 0xb73de194>
>>> doc.remove(c)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>>



Отредактировано py.user.next (Ноя. 16, 2014 03:25:19)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version