我正在嘗試將在CSV檔案中完成的查詢結果寫入XML檔案,但我找不到以表格格式正確處理結果的方法。
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
如何將此資料匯出到具有上述格式的 csv 檔案,而無需手動定義列/屬性名稱?
uj5u.com熱心網友回復:
由于注釋中提到的 XML 是以屬性為中心的,因此請考慮使用串列決議決議所有屬性字典。然后,通過以下方式寫入 CSV 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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/459329.html
上一篇:通過XSL1.0轉換XML檔案
