如何在python中处理xml文件

2024-04-20 09:56:35 发布

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

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

报表.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标记并从标记中获取数据。在

以下是标签上的数据:

^{pr2}$

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


Tags: 文件数据标记reporttimexmlcontentkeyword
1条回答
网友
1楼 · 发布于 2024-04-20 09:56:35

我最近遇到了一个类似的问题,解决这个问题的方法是使用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!

相关问题 更多 >