如何使用python将XML中的内容提取到CSV中

2024-05-26 11:08:28 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的xml

</testsuites>`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<testsuites>
<testsuite name="Test" tests="7" failure="1" timestamp="2019-12-11T11:33:16.057Z">
  <testcase **name**="02. Create pinboard" classname="Testcase" **time**="88.832">
  </testcase>
 <testcase **name**="17. Adding Data labels to a Geo chart" classname="Testcases" **time**="68.39">
    <**failure message**="Step Failed: Element not found More info at: https://"www.google.com"/>
  </testcase>
</testsuite>
</testsuites>`

从这里,我想使用python将name、time、failure message的值提取到csv中。 我应该怎么做。请建议


Tags: nametestmessagefailuretimeversionxmltestcase
2条回答

如果我理解的很好,您希望从.XML文件中提取信息,并将其写入.CSV文件中(可能需要经过一些后期处理)

为此,我的建议是用以下方法组织代码:

  • 读取器部分:将.xml文件作为输入,并将信息存储在data structure中。您可以使用xml library轻松解析xml文件

  • 编写器部分:将data structure作为输入(通常对其进行迭代)写入.csv输出文件。您可以使用csv library或者简单地使用经典的开放文件方法(因为csv很容易格式化)

根据您的代码,每个部分都可以是函数(但也可以是类或包)。 data structure是为了满足您的需要而构建的,但是您可以将每个数据存储在列表、字典、数组或数据帧中。。注意,对于像numpy/pandas这样的库,已经有了在.csv文件中写入数组/数据帧内容的函数

因为不清楚,我从你的帖子中推测你不知道如何开始。希望这能帮助你解决你的问题

这个怎么样

from simplified_scrapy import SimplifiedDoc,utils
html = '''
</testsuites>`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<testsuites>
<testsuite name="Test" tests="7" failure="1" timestamp="2019-12-11T11:33:16.057Z">
  <testcase **name**="02. Create pinboard" classname="Testcase" **time**="88.832">
  </testcase>
 <testcase **name**="17. Adding Data labels to a Geo chart" classname="Testcases" **time**="68.39">
    <**failure message**="Step Failed: Element not found More info at: https://www.google.com"/>
  </testcase>
</testsuite>
</testsuites>`
'''
doc = SimplifiedDoc(html)
row = []
row.append(["name","tests", "failure","timestamp","testcase_name","testcase_classname","testcase_time","failure_message"])
testsuites = doc.selects('testsuites>testsuite')
for t in testsuites:
  for testcase in t.testcases:
    message = testcase.select('**failure>message**()')
    row.append([t.name,t.tests, t.failure,t.timestamp,testcase['**name**'],testcase['classname'],testcase['**time**'],message])

utils.save2csv("test.csv",row)

结果:

name,tests,failure,timestamp,testcase_name,testcase_classname,testcase_time,failure_message
Test,7,1,2019-12-11T11:33:16.057Z,02. Create pinboard,Testcase,88.832,
Test,7,1,2019-12-11T11:33:16.057Z,17. Adding Data labels to a Geo chart,Testcases,68.39,Step Failed: Element not found More info at: https://www.google.com

相关问题 更多 >