将xml转换为csv的Python脚本
我有一个XML文件,如下所示。当然,有重复的标记和:将xml转换为csv的Python脚本,python,xml,csv,Python,Xml,Csv,我有一个XML文件,如下所示。当然,有重复的标记和: <file version=3.6 xmlns:xsi="http://ww.w3.org/2009/XMLSchemainstance"> <Date>2014-05-12</Date> <creationTime>2014-05-12 :56:54</creationTime> <location>http://www.w.org/2009/XMLSchemai
<file version=3.6 xmlns:xsi="http://ww.w3.org/2009/XMLSchemainstance">
<Date>2014-05-12</Date>
<creationTime>2014-05-12 :56:54</creationTime>
<location>http://www.w.org/2009/XMLSchemainstance/output/official/.20140512.PNL.xml.gz</location>
<contentType>nnn</contentType>
<signOffBy>gft_test_fo</signOffBy>
<signOffGroup>BRFPOOLNEW_SO</signOffGroup>
<book>
<riskBook>BRFPOOL</riskBook>
<trade>
<tradeId>00000000000009752</tradeId>
<subTrade>
<riskTrade>00000000000009752</riskTrade>
<riskProductType>BOND_NF</riskProductType>
<reportCollection>
<report>
<valuationSource>RISK_ENGINE</valuationSource>
<reportName>BRZ_HGS_PPTCC</reportName>
<riskPoint>
<value>0.00</value>
<valueCcy>BRL</valueCcy>
</riskPoint>
</report>
<report>
<valuationSource>RISK_ENGINE</valuationSource>
<reportName>BRZ_HGS_PPTCC</reportName>
<riskPoint>
<value>0.00</value>
<valueCcy>BRL</valueCcy>
</riskPoint>
</report>
</reportCollection>
</subTrade>
</trade>
</book>
</file>
以下是我迄今为止尝试过的代码:
import xml.etree.ElementTree as etree
root=etree.parse('./emp.xml').getroot()
for b in zip(root.findall("book/trade/tradeId"),root.findall ("book/trade/subTrade/riskTrade"),root.findall("book/trade/subTrade/riskProductType"),root.findall("book/trade/subTrade/reportcollectin/report/valuationSource"),("book/trade/subTrade/reportcollectin/report/reportName"),("book/trade/subTrade/reportcollectin/report/refCurve"),("book/trade/subTrade/reportcollectin/report/riskPoint/value"),("book/trade/subTrade/reportcollectin/report/riskPoint/valueCcy")
print (",".join([x.text for x in b]))
我没有得到预期的输出,请帮助我。除了XML中的错误(在
和
上没有结束标记)和python文件中的错误(文件名中没有结束引号,一些路径路径拼写错误,如reportcollectin
)当涉及两个不同大小的列表时,您不能使用zip
功能,结果总是较短的长度,并且在您搜索的代码中root.findall(“book/trade/subTrade/reportCollection/report/refCurve”)
是一个空列表,最终结果也以空列表结束
最好的方法是先获取主变量(日期、creationTime、creationTime),然后使用循环在书籍和报告上迭代。上面的代码会发生什么?你看到错误了吗?@shaktimaan我没有得到预期的输出请修复你的缩进并将其标记为代码缩进中没有问题我得到了输出,但错误我在问题中提到了你的代码-不是你实际python代码的缩进:)请提供一个建议的python代码我对python非常陌生。
import xml.etree.ElementTree as etree
root=etree.parse('./emp.xml').getroot()
for b in zip(root.findall("book/trade/tradeId"),root.findall ("book/trade/subTrade/riskTrade"),root.findall("book/trade/subTrade/riskProductType"),root.findall("book/trade/subTrade/reportcollectin/report/valuationSource"),("book/trade/subTrade/reportcollectin/report/reportName"),("book/trade/subTrade/reportcollectin/report/refCurve"),("book/trade/subTrade/reportcollectin/report/riskPoint/value"),("book/trade/subTrade/reportcollectin/report/riskPoint/valueCcy")
print (",".join([x.text for x in b]))