gpt4 book ai didi

python - 如何在python中处理xml文件

转载 作者:行者123 更新时间:2023-12-01 05:52:37 29 4
gpt4 key购买 nike

我有一个大约 1GB 的 XML 文件,其中包含我需要从中获取数据的 XML 标签。我有以下格式的 XML 文件(我仅粘贴示例数据,因为实际文件的大小约为 1 GB)。

report.xml

<report>
<report-name name="ALL_TIME_KEYWORDS_PERFORMANCE_REPORT"/>
<date-range date="All Time"/>
<table>
<row campaignID="79057390" adGroupID="3451305670" keywordID="3000000" keyword="Content" avgPosition="1.55" cost="252910000" clicks="11" conv1PerClick="0" impressions="7395" day="2012-04-23" currency="INR" account="Virtual Voyage" timeZone="(GMT+05:30) India Standard Time" viewThroughConv="0"/>

<row campaignID="79057390" adGroupID="3451305670" keywordID="3000000" keyword="Content" avgPosition="1.16" cost="0" clicks="0" conv1PerClick="0" impressions="160" day="2012-04-23" currency="INR" account="Virtual Voyage" timeZone="(GMT+05:30) India Standard Time" viewThroughConv="0"/>

<row campaignID="79057390" adGroupID="3451305670" keywordID="3000000" keyword="Content" avgPosition="1.56" cost="0" clicks="0" conv1PerClick="0" impressions="34" day="2012-04-23" currency="INR" account="Virtual Voyage" timeZone="(GMT+05:30) India Standard Time" viewThroughConv="0"/>

</table>
</report>
  1. 解析/处理 XML 文件并从 xml 标记获取数据的最佳方法是什么在 Python 中?

  2. 是否有可以处理 XML 文件的框架?

  3. 该方法需要快速;它需要在 100 秒内完成。

我一直在使用 Hadoop 和 Python 来处理 XML 文件,处理数据通常需要近 200 秒......所以我正在寻找一种替代解决方案来解析上述 XML 标签并从标签。

以下是来自标签的数据:

 campaignID="79057390" adGroupID="3451305670" keywordID="3000000" keyword="Content" avgPosition="1.16" cost="0" clicks="0" ...

处理完 XML 文件后,我会将数据和值 (79057390,3451305670 ...) 存储在 MySQL 数据库中。我所需要的只是能够在不到 100 秒的时间内处理大约 1GB 大小的 XML 文件并将处理后的数据保存到 MySQL 数据库。

最佳答案

我最近遇到了类似的问题,解决它的方法是使用 iterparse 函数和 lxml,最后,它都是基于使用类似 SAX 的解析器而不是类似 DOM 的解析器,记住 DOM在内存中工作,而 SAX 是事件驱动的,因此使用 SAX 可以节省大量内存(这也意味着时间!,因为您不需要等待加载所有文档来解析它!)

我认为你可以使用这样的东西

import xml.etree.cElementTree as ET

file_path = "/path/to/your/test.xml"
context = ET.iterparse(file_path, events=("start", "end")) #Probably we could use only the start tag
# turn it into an iterator
context = iter(context)
on_members_tag = False

for event, elem in context:
tag = elem.tag
value = elem.text
if value :
value = value.encode('utf-8').strip()
if event == 'start' :
if tag == "row" :
attribs = elem.attrib
print "This is the campaignID %s and this is the adGroupID" % (attribs['campaignID'] , attribs['adGroupID'])

elem.clear() #Save memory!

关于python - 如何在python中处理xml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13639910/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com