亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 XML 文件轉換為 CSV 文件的有效方法?

將 XML 文件轉換為 CSV 文件的有效方法?

婷婷同學_ 2023-08-08 17:54:05
我正在嘗試找到一種使用 Python 將 xml 文件轉換為 csv 文件的方法。我想這樣做,以便腳本能夠解析每個警報的 xml 文件(請參閱下面的 xml 片段)。因此,它將創建一個 xls 文件,其中包含 、 、 和 的列,eventType類似于probableCause以下description格式severities:我嘗試過的(小樣本):from logging import rootfrom xml.etree import ElementTreeimport osimport csvtree = ElementTree.parse('Fault.xml')sitescope_data = open('Out.csv', 'w', newline='', encoding='utf-8')csvwriter = csv.writer(sitescope_data)col_names = ['eventType', 'probableCause', 'description']csvwriter.writerow(col_names)root = tree.getroot()for eventData in root.findall('alarms'):    event_data = []    event = eventData.find('alarm')    event_id = event.find('eventType')    if event_id != None :        event_id = event_id.text    event_data.append(event_id)    csvwriter.writerow(event_data)sitescope_data.close()
查看完整描述

1 回答

?
烙印99

TA貢獻1829條經驗 獲得超13個贊

root = tree.getroot()


def get_uri(elem):

    if elem.tag[0] == "{":

        uri, ignore, tag = elem.tag[1:].partition("}")

        return f"{{{uri}}}"

    return ""


uri = get_uri(root)


def recurse(root):

    for child in root:

        recurse(child)

        print(child.tag)

    for event in root.findall(f'{uri}alarm'):

        event_data = []

        event_id = event.find(f'{uri}eventType')

        if event_id != None :

            event_id = event_id.text

        event_data.append(event_id)


        probableCause = event.find(f'{uri}probableCause')

        if probableCause != None:

            probableCause = probableCause.text

        event_data.append(probableCause)


        severities = event.find(f'{uir}severities')

        if severities:

            severity_data = ','.join([sv.text for sv in severities.findall('f{uri}severity')])

            event_data.append(severity_data)

        else:

            event_data.append("")


        csvwriter.writerow(event_data)

        


recurse(root)

需要注意的事項:

  1. 使用遞歸遍歷 XML

  2. print 語句將顯示您的每個標簽都有來自根目錄中 xmlns 屬性的 {urn:nortel:namespaces:mcp:faults} ,這可能是最讓您困惑的地方。我添加了一個函數來獲取此“uri”文本并將其添加到每個標簽前面。

  3. 每次寫入 csv 時,您都需要附加多于一列


查看完整回答
反對 回復 2023-08-08
  • 1 回答
  • 0 關注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號