簡體   English   中英

Python lxml:如何拆分逗號分隔的數據並從 XML 文件中查找特定值?

[英]Python lxml: How to split comma separated data and find specific values from XML-file?

我有一個包含數千行數據的 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)

編輯1

一旦我得到了使用 Xpath 和 split-method 的建議,我就編寫了一段代碼,如下所示:

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 m) 搜索並獲取第三行。 但是,目前我無法拆分標簽的內部文本,我不知道該怎么做:

如果我嘗試像這樣拆分上述輸出

datat = data.split(",")

我得到屬性錯誤:

AttributeError: 'lxml.etree._Element' object has no attribute 'split'

我想這意味着 lxml 沒有 split 方法,我需要找出另一種方法來做到這一點。 如果我嘗試以這種方式拆分上述輸出:

datat = [i.split(",") for i in data]
print(datat[0])

我的輸出只是空括號,這意味着這個 for 循環很可能什么都不做。 打印 datat 給了我這個錯誤,這很可能證明我沒有做對。

IndexError: list index out of range

拆分后我想要的輸出是'1.0','5.0','10.0'以獲得我想要的輸出值10.0 在 split-method 之后,我想可以找到 vale 再添加兩行:

T = float(datat[5])
print(T.text)

有誰知道我的拆分方法有什么問題? 因為我做得不對,還沒有通過谷歌找到任何有用的建議。

感謝有關 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):
        data_string = data.text
        print(data_string)
        split_data = data_string.split(',')
        print(split_data)
        T = float(split_data[2])
        print(T)

問題似乎是我沒有創建字符串。 基本上,我的編輯部分缺少一行:

data_string = data.text
print(data_string)

輸出: 1.0,5.0,10.0此命令拆分數據:

split_data = data_string.split(',')
print(split_data)

輸出: ['\\n1.0', 5.0, 10.0\\n']

最后這給了我我正在尋找的輸出:

T = float(split_data[2])
print(T)

輸出: 10.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM