我正在嘗試使用 Python 將帳戶資訊從大型 xml 檔案轉換為 csv。這在很大程度上是成功的,但是 Python 腳本正在從帳號中洗掉前導零并將截斷的數字向右對齊。例如,帳號 007 被裁剪為 7。帳號可以是數字、字串或字母數字。
這是當前的腳本:
import pandas as pd
import xml.etree.ElementTree as ET
# Parse the XML file and find the root
xml_file = "C:\\Python Scripts\\test.xml"
csv_file = "C:\\Python Scripts\\test.csv"
xml_tree = ET.parse(xml_file)
root = xml_tree.getroot()
# Convert parsed xml file to a csv
get_range = lambda col: range(len(col))
l = [{r[i].tag:r[i].text for i in get_range(r)} for r in root]
df = pd.DataFrame.from_dict(l)
df.to_csv(csv_file)
下面是 xml 檔案示例 test.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<TSAutoUpload xsi:noNamespaceSchemaLocation="tsautoup.xsd"
xmlns:xsi="http:www.w3.org/2011/XMLSchema-instance">
<Firm>
<AcctNr>TEST</AcctNr>
<LongName>TEST ACCOUNT</LongName>
</Firm>
<Firm>
<AcctNr>007</AcctNr>
<LongName>JAMES BOND INC</LongName>
</Firm>
</TSAutoUpload>
這是 test.csv 輸出,注意前導零的截斷。7 也向右對齊,理想情況下它應該是 007,向左對齊:
| 帳戶編號 | 長名稱 | |
|---|---|---|
| 0 | 測驗 | 測驗賬戶 |
| 1 | 7 | 詹姆斯邦德公司 |
請讓我知道如何修改腳本以保留前導零而不丟失任何功能?
另外,不太重要的是,007 如何對齊到左側而不是右側?
uj5u.com熱心網友回復:
沒有任何外部庫
import xml.etree.ElementTree as ET
import csv
xml = '''<TSAutoUpload xsi:noNamespaceSchemaLocation="tsautoup.xsd"
xmlns:xsi="http:www.w3.org/2011/XMLSchema-instance">
<Firm>
<AcctNr>0087</AcctNr>
<LongName>TEST ACCOUNT</LongName>
</Firm>
<Firm>
<AcctNr>007</AcctNr>
<LongName>JAMES BOND INC</LongName>
</Firm>
</TSAutoUpload>'''
root = ET.fromstring(xml)
firms = [f for f in root.findall('.//Firm')]
data = [{c.tag:c.text for c in list(f)} for f in firms]
with open('out.csv','w') as f:
csv_writer = csv.DictWriter(f, list(data[0].keys()))
csv_writer.writeheader()
csv_writer.writerows(data)
輸出.csv
AcctNr,LongName
0087,TEST ACCOUNT
007,JAMES BOND INC
uj5u.com熱心網友回復:
作為<Firm>根節點的子節點,<TSAutoUpload>您可以遍歷根節點并將每個子節點的文本<Firm>作為單獨的列寫入
代碼:
import xml.etree.ElementTree as ET
import csv
# Parse the XML file and find the root
xml_file = r"C:\Python Scripts\test.xml"
csv_file = r"C:\Python Scripts\test.csv"
xml_tree = ET.parse(xml_file)
root = xml_tree.getroot()
with open(csv_file, "w", newline="") as f:
writer = csv.writer(f)
for firm in root:
writer.writerow(node.text for node in firm)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/341387.html
上一篇:XSLT總是轉到其他條件
