将解析的 XML 结果写入 CSV

Writing parsed XML results to CSV

我正在尝试将在 XML 文件中完成的查询结果写入 CSV 文件,但我找不到以表格格式正确处理结果的方法.

from lxml.etree import Element, XMLParser, parse
from typing import Any
import csv

p = XMLParser(huge_tree=True)
tree = parse("myfile.xml", parser=p)
root = tree.getroot()

result_values = []
result_values = root.findall("MYTAG")

with open('path/to/csv_file', 'w') as f:
    csv_reader = csv.reader(f)
    for result_value in result_values:
        writer = csv.writer(f)
        writer.writerows(result_value.items())

使用上面的代码,我以这种形式得到它们(数据不正确并且重复的列作为行):

column1 value
column2 value
column3 value
column1 value
column2 value
column3 value
....

我需要的是以下内容,一个包含列(最初是 XML 属性)作为每个匹配结果的列和行的 csv:

colum1 column2 column3 ...
value   value   value
value   value   value

如何在不手动定义 column/property 名称的情况下将此数据导出到具有上述格式的 csv 文件?

由于您在评论中提到的 XML 是 attribute-centric,请考虑使用列表理解来解析所有属性字典。然后,通过 DictWriter:

写入 CSV
with self.input().open() as f: 
    p = XMLParser(huge_tree=True) 
    tree = parse(f, parser=p) 
    root = tree.getroot() 

    # RETURN LIST OF ATTRIBUTE DICTIONARIES
    result_values = [dict(n.attrib) for n in root.findall(".//MYTAG")]

    # RETRIEVE UNIQUE KEYS FOR COLUMN HEADERS
    keys = list(dict.fromkeys([k for dct in result_values for k in dct]))

with self.output().open(mode="w") as f:
    # WRITE TO CSV VIA DICTWRITER
    dw = csv.DictWriter(f, fieldnames=keys)
    dw.writeheader()
    dw.writerows(result_values)