[Python] Attempting to read a and XML file using python and write its contents to a CSV for...

Discussão em 'Python' iniciado por Stack, Junho 13, 2025.

  1. Stack

    Stack Membro Participativo

    Would like the xml sample below to be read in by the code snippet further below. I the error further down and cannot seem to clear it...

    here is the xml file.

    <records xmlns="http://xmlns.opennms.org/xsd/config/model-import" date-stamp="2025-01-13T11:51:32.229-08:00" foreign-source="Live" last-import="2025-01-13T12:10:16.061-08:00">
    <record foreign-id="1734632502410" node-label="A2F0911D_TPMW137A">
    <interface ip-addr="11.100.0.59" status="1" snmp-primary="P">
    <monitored-service service-name="SNMP"/>
    <monitored-service service-name="ICMP"/>
    </interface>
    <asset name="latitude" value="27.40733333"/>
    <asset name="longitude" value="-82.53013889"/>
    <meta-data context="requisition" key="Region" value="SOUTH"/>
    <meta-data context="requisition" key="Area" value="Florida"/>
    <meta-data context="requisition" key="Market" value="TP"/>
    <meta-data context="requisition" key="Cluster" value="A2F0406A"/>
    <meta-data context="requisition" key="Software version" value="12.1.0.0.0.371"/>
    <meta-data context="requisition" key="IDU Serial Number" value="E249J10478"/>
    <meta-data context="requisition" key="Radio slot_sn" value=" Slot 2, Port 2 -RSL=-29.9 E249J10478 /// Slot 2, Port 1 -RSL=-29.9 E249J10478 /// "/>
    <meta-data context="requisition" key="ComSearch Call Sign" value="WRMD360"/>
    <meta-data context="requisition" key="Linkids" value="3007262 "/>
    <meta-data context="requisition" key="Slot_Far_IP" value=" Slot 2, Port 2 11_100_133_187 /// Slot 2, Port 1 11_100_133_187 /// "/>
    <meta-data context="requisition" key="Crawler First Found Date" value="2024-08-31 00:00:00"/>
    <meta-data context="requisition" key="Crawler Last Found Date" value="2024-11-29 00:00:00"/>
    </record>
    <record foreign-id="1734632502418" node-label="A2F0406A_TPMW136A">
    <interface ip-addr="11.100.133.187" status="1" snmp-primary="P">
    <monitored-service service-name="SNMP"/>
    <monitored-service service-name="ICMP"/>
    </interface>
    <asset name="latitude" value="27.37944444"/>
    <asset name="longitude" value="-82.50444444"/>
    <meta-data context="requisition" key="Region" value="SOUTH"/>
    <meta-data context="requisition" key="Area" value="Florida"/>
    <meta-data context="requisition" key="Market" value="TP"/>
    <meta-data context="requisition" key="Cluster" value="A2F0406A"/>
    <meta-data context="requisition" key="Software version" value="12.1.0.0.0.371"/>
    <meta-data context="requisition" key="IDU Serial Number" value="E403L29591"/>
    <meta-data context="requisition" key="Radio slot_sn" value=" Slot 2, Port 2 -RSL=-29.9 E403L29591 /// Slot 2, Port 1 -RSL=-29.9 E403L29591 /// "/>
    <meta-data context="requisition" key="ComSearch Call Sign" value="WRMD361"/>
    <meta-data context="requisition" key="Linkids" value="3007262 "/>
    <meta-data context="requisition" key="Slot_Far_IP" value=" Slot 2, Port 2 11_100_0_59 /// Slot 2, Port 1 11_100_0_59 /// "/>
    <meta-data context="requisition" key="Crawler First Found Date" value="2024-08-28 00:00:00"/>
    <meta-data context="requisition" key="Crawler Last Found Date" value="2024-11-29 00:00:00"/>
    </record>
    </records>


    here is python code I am using

    import xml.etree.ElementTree as ET
    XML_req = 'Live.xml'
    #path = '/opt/opennms/etc/imports/' # path to current xml requistion...
    path = '/home/adm_bbyers6/Requisition_import/'
    full_path = os.path.join(path, XML_req)
    current_CSV_inventory = 'Microwave_XML_inv.csv' #

    #print('the xml path and file is ', full_path)
    tree = ET.parse(full_path)
    root = tree.getroot()

    # Find all 'record' elements
    records = root.findall('.//record')


    fieldnames = [elem.tag for elem in records[0]]

    # Write to CSV
    with open('output.csv', 'w', newline='', encoding='utf-8') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()

    for record in records:
    row = {child.tag: child.text for child in record}
    writer.writerow(row)

    output of script above is below


    Traceback (most recent call last): File "update_opennms.req.py", line 93, in fieldnames = [elem.tag for elem in records[0]] IndexError: list index out of range

    Continue reading...

Compartilhe esta Página