将解析的 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)
我正在尝试将在 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
:
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)