У меня есть XML-файл, содержащий тысячи строк данных. Один XML-файл выглядит так:
<logs xmlns="http://www.xxxxxx.org/xxxxxx/1ser"
<data> 0.0,1.0,3.0 </data>
<data> 0.5,2.0,4.0 </data>
<data> 1.0,5.0,10.0 </data>
</logs>
Мне нужно прочитать только один конкретный тег из каждого файла. Из примера XML мне нужна только третья строка и два значения оттуда (первый «столбец» и шестой столбец). Значения разделяются запятыми внутри тегов данных. По сути, мне нужно найти и распечатать значение температуры в зависимости от местоположения, которое я уже знаю.
Я начал с lxml.etree и с кода, который печатает весь набор данных:
import lxml.etree as ET
file='data.xml'
tree = ET.parse(file)
root = tree.getroot()
for data in root.iter(data):
print(data.text)
EDIT1
Получив совет по использованию Xpath и split-метода, я создал фрагмент кода, который выглядит следующим образом:
import lxml.etree as ET
file='data.xml'
tree = ET.parse(file)
root = tree.getroot()
ns = {'n': 'http://www.xxxxxx.org/xxxxxx/1ser'}
for data in root.xpath('//n:data[contains(text(), "1.0")]', namespaces=ns):
print(data.text)
Это производит вывод как
1.0,5.0,10.0
Используя этот метод, я могу найти и получить строку номер три в зависимости от местоположения (1,0 м). Однако на данный момент я не могу разбить внутренний текст тега и не знаю, как это сделать:
Если я попытаюсь разделить вышеупомянутый вывод, как это
datat = data.split(",")
Я получаю ошибку атрибута:
AttributeError: 'lxml.etree._Element' object has no attribute 'split'
И я думаю, это означает, что в lxml нет метода расщепления, и мне нужно найти другой способ сделать это. Если я попытаюсь разделить вышеупомянутый вывод таким образом:
datat = [i.split(",") for i in data]
print(datat[0])
Мой вывод - только пустые скобки, означающие, что цикл for, скорее всего, ничего не делает. Печать данных дает мне эту ошибку, которая, скорее всего, доказывает, что я не сделал это правильно.
IndexError: list index out of range
Мой желаемый результат после разделения будет
'1.0','5.0','10.0'
чтобы получить желаемое значение на выходе 10.0
. Я полагаю, что после split-метода можно найти vale, добавив еще две строки:
T = float(datat[5])
print(T.text)
Кто-нибудь знает, что не так с моими методами расщепления? Так как я делаю это неправильно и пока не нашел полезного совета через Google.