问题标签 [iterparse]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1235 浏览

python - 抓取 tag with lxml's iterparse</h1> <div id="body"><p>I'm running into a problem with using lxml's <code>iterparse</code> on my HTML. I'm trying to get the <code><title></code>'s text but this simple f</a> </h3> <div class="s-post-summary--content-excerpt"> </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags tags js-tags t-cñ t-ûnet t-aspûnet-mvc t-aspûnet-mvc-4 t-actionfilterattribute"> <a href="/tags/python" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">python</a><a href="/tags/dom" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">dom</a><a href="/tags/web-scraping" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">web-scraping</a><a href="/tags/lxml" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">lxml</a><a href="/tags/iterparse" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">iterparse</a> </div> <div class="s-user-card s-user-card__minimal"> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4"> </div> </div> <time class="s-user-card--time" style="margin-left:5px;"> <span title="2022-04-18 08:34:11Z" class="relativetime"> </span></time> </div> </div> </div> </div><div id="question-summary-71909431" class="s-post-summary js-post-summary" data-post-id="71909431" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">投票</span> </div> <div class="s-post-summary--stats-item " title="3 answers"> <span class="s-post-summary--stats-item-number">3</span> <span class="s-post-summary--stats-item-unit">回答</span> </div> <div class="s-post-summary--stats-item " title="7041 views"> <span class="s-post-summary--stats-item-number">7041</span> <span class="s-post-summary--stats-item-unit">浏览</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/10487062" class="s-link">python - 使用 lxml 和 iterparse 获取子元素</a> </h3> <div class="s-post-summary--content-excerpt"> <p>我正在尝试编写一个解析算法来有效地从 xml 文档中提取数据。我目前正在基于元素和子元素滚动文档,但想改用 iterparse。一个问题是我有一个元素列表,当找到这些元素时,我想从中提取子数据,但似乎使用 iterparse 我的选项是基于一个元素名称进行过滤,或者获取每个元素。</p> <p>示例 xml:</p> <p>代码示例:</p> </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags tags js-tags t-cñ t-ûnet t-aspûnet-mvc t-aspûnet-mvc-4 t-actionfilterattribute"> <a href="/tags/python" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">python</a><a href="/tags/parsing" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">parsing</a><a href="/tags/lxml" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">lxml</a><a href="/tags/iterparse" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">iterparse</a> </div> <div class="s-user-card s-user-card__minimal"> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4"> </div> </div> <time class="s-user-card--time" style="margin-left:5px;"> <span title="2022-04-18 08:34:11Z" class="relativetime"> </span></time> </div> </div> </div> </div><div id="question-summary-71909431" class="s-post-summary js-post-summary" data-post-id="71909431" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">投票</span> </div> <div class="s-post-summary--stats-item " title="2 answers"> <span class="s-post-summary--stats-item-number">2</span> <span class="s-post-summary--stats-item-unit">回答</span> </div> <div class="s-post-summary--stats-item " title="1672 views"> <span class="s-post-summary--stats-item-number">1672</span> <span class="s-post-summary--stats-item-unit">浏览</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/11216662" class="s-link">python - 为什么 elementtree.ElementTree.iterparse 使用这么多内存?</a> </h3> <div class="s-post-summary--content-excerpt"> <p>我正在使用 elementtree.ElementTree.iterparse 来解析一个大 (371 MB) xml 文件。</p> <p>我的代码基本上是这样的:</p> <p>我的问题有两个:</p> <p>首先 - 我需要 A 和 B(参见代码片段注释)吗?有人告诉我 root.clear() 会清除不必要的子项,因此不会占用内存,但这是我的观察结果:在内存消耗方面,使用 B 而不是 A 与既不使用相同(使用任务管理器绘制)。仅使用 A 似乎与同时使用两者相同。</p> <p>第二 - 为什么这仍然消耗这么多内存?当程序运行时,它在接近尾声时使用了大约 100 MB 的 RAM。</p> <p>我认为它与outf有关,但为什么呢?它不只是写入磁盘吗?如果它在 outf 关闭之前存储该数据,我该如何避免这种情况?</p> <p>其他信息:我在 Windows 上使用 Python 2.7.3。</p> </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags tags js-tags t-cñ t-ûnet t-aspûnet-mvc t-aspûnet-mvc-4 t-actionfilterattribute"> <a href="/tags/python" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">python</a><a href="/tags/xml" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">xml</a><a href="/tags/memory" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">memory</a><a href="/tags/elementtree" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">elementtree</a><a href="/tags/iterparse" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">iterparse</a> </div> <div class="s-user-card s-user-card__minimal"> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4"> </div> </div> <time class="s-user-card--time" style="margin-left:5px;"> <span title="2022-04-18 08:34:11Z" class="relativetime"> </span></time> </div> </div> </div> </div><div id="question-summary-71909431" class="s-post-summary js-post-summary" data-post-id="71909431" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">投票</span> </div> <div class="s-post-summary--stats-item " title="1 answers"> <span class="s-post-summary--stats-item-number">1</span> <span class="s-post-summary--stats-item-unit">回答</span> </div> <div class="s-post-summary--stats-item " title="1113 views"> <span class="s-post-summary--stats-item-number">1113</span> <span class="s-post-summary--stats-item-unit">浏览</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/11250934" class="s-link">python - ElementTree iterparse 需要多长时间?</a> </h3> <div class="s-post-summary--content-excerpt"> <p>在回答另一个问题时,有人向我展示了以下教程,其中作者声称已使用 iterparse 在 3 秒内解析约 100 MB 的 XML 文件:</p> <p><a href="http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python-with-elementtree/" rel="nofollow">http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python-with-elementtree/</a></p> <p>我正在尝试解析一个 ~90 MB XML 文件,并且我有以下代码:</p> <p>这大约需要 30 秒……甚至与我使用类似大小的文件、类似的算法和相同的包阅读的教程中报告的数量级不同。</p> <p>有人可以告诉我我的代码可能有什么问题,或者我的情况和本教程之间可能没有注意到哪些差异?</p> <p>我正在使用 Python 2.7.3。</p> <p><strong>附录:</strong></p> <p>我也在使用一台相当强大的机器,以防有人认为可能是它。</p> </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags tags js-tags t-cñ t-ûnet t-aspûnet-mvc t-aspûnet-mvc-4 t-actionfilterattribute"> <a href="/tags/python" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">python</a><a href="/tags/xml" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">xml</a><a href="/tags/iterparse" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">iterparse</a><a href="/tags/celementtree" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">celementtree</a> </div> <div class="s-user-card s-user-card__minimal"> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4"> </div> </div> <time class="s-user-card--time" style="margin-left:5px;"> <span title="2022-04-18 08:34:11Z" class="relativetime"> </span></time> </div> </div> </div> </div><div id="question-summary-71909431" class="s-post-summary js-post-summary" data-post-id="71909431" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">投票</span> </div> <div class="s-post-summary--stats-item " title="4 answers"> <span class="s-post-summary--stats-item-number">4</span> <span class="s-post-summary--stats-item-unit">回答</span> </div> <div class="s-post-summary--stats-item " title="7376 views"> <span class="s-post-summary--stats-item-number">7376</span> <span class="s-post-summary--stats-item-unit">浏览</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/11400308" class="s-link">python - 在 Python 中解析巨大的、编码错误的 XML 文件</a> </h3> <div class="s-post-summary--content-excerpt"> <p>我一直在研究解析外部 XML 文件的代码。其中一些文件很大,高达千兆字节的数据。不用说,这些文件需要被解析为流,因为将它们加载到内存中效率太低,并且经常导致 OutOfMemory 麻烦。</p> <p>我使用了 miniDOM、ElementTree、cElementTree 库,目前正在使用 lxml。现在我有一个工作的、非常节省内存的脚本,使用<code>lxml.etree.iterparse</code>. 问题是我需要解析的一些 XML 文件包含编码错误(它们宣传为 UTF-8,但包含不同编码的字符)。使用<code>lxml.etree.parse</code>时可以通过使用<code>recover=True</code>自定义解析器的选项来修复它,但<code>iterparse</code>不接受自定义解析器。(另见:<a href="https://stackoverflow.com/questions/2352840/parsing-broken-xml-with-lxml-etree-iterparse">这个问题</a>)</p> <p>我当前的代码如下所示:</p> <p><code>iterparse</code>遇到错误字符时出错(在这种情况下,它是 a <code>^Y</code>):</p> <p>我什至不想解码这些数据,我可以放弃它。但是我不知道有什么方法可以跳过该元素 - 我尝试过<code>context.next</code>并<code>continue</code>在 try/except 语句中。</p> <p>任何帮助,将不胜感激!</p> <p><strong>更新</strong></p> <p>一些附加信息:这是 iterparse 失败的行:</p> <p><code><description><![CDATA:[musea de la photographie fonds mercator. Met meer dan 80.000 foto^Ys en 3 miljoen negatieven is het Muse de la...]]></description></code></p> <p>根据 etree,错误发生在 bytes <code>0x19 0x73 0x20 0x65</code>。<br> 根据 hexedit,<code>19 73 20 65</code>转换为 ASCII<code>.s e</code><br> 在<code>.</code>这个地方应该是一个撇号(foto's)。</p> <p>我还发现<a href="https://stackoverflow.com/questions/1325379/hexadecimal-0x19-is-an-invalid-character">了这个问题</a>,它没有提供解决方案。</p> </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags tags js-tags t-cñ t-ûnet t-aspûnet-mvc t-aspûnet-mvc-4 t-actionfilterattribute"> <a href="/tags/python" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">python</a><a href="/tags/xml" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">xml</a><a href="/tags/encoding" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">encoding</a><a href="/tags/iterparse" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">iterparse</a> </div> <div class="s-user-card s-user-card__minimal"> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4"> </div> </div> <time class="s-user-card--time" style="margin-left:5px;"> <span title="2022-04-18 08:34:11Z" class="relativetime"> </span></time> </div> </div> </div> </div><div id="question-summary-71909431" class="s-post-summary js-post-summary" data-post-id="71909431" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">投票</span> </div> <div class="s-post-summary--stats-item " title="3 answers"> <span class="s-post-summary--stats-item-number">3</span> <span class="s-post-summary--stats-item-unit">回答</span> </div> <div class="s-post-summary--stats-item " title="10837 views"> <span class="s-post-summary--stats-item-number">10837</span> <span class="s-post-summary--stats-item-unit">浏览</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/12160418" class="s-link">python - 为什么 lxml.etree.iterparse() 会占用我所有的内存?</a> </h3> <div class="s-post-summary--content-excerpt"> <p>这最终会消耗我所有可用的内存,然后进程被杀死。我尝试将标签从<code>schedule</code>“更小”标签更改为“更小”的标签,但这并没有什么不同。</p> <p>我在做什么错/如何处理这个大文件<code>iterparse()</code>?</p> <p>我可以很容易地把它切成小块并处理它,但这比我想要的更难看。</p> </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags tags js-tags t-cñ t-ûnet t-aspûnet-mvc t-aspûnet-mvc-4 t-actionfilterattribute"> <a href="/tags/python" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">python</a><a href="/tags/xml" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">xml</a><a href="/tags/memory" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">memory</a><a href="/tags/lxml" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">lxml</a><a href="/tags/iterparse" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">iterparse</a> </div> <div class="s-user-card s-user-card__minimal"> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4"> </div> </div> <time class="s-user-card--time" style="margin-left:5px;"> <span title="2022-04-18 08:34:11Z" class="relativetime"> </span></time> </div> </div> </div> </div><div id="question-summary-71909431" class="s-post-summary js-post-summary" data-post-id="71909431" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">投票</span> </div> <div class="s-post-summary--stats-item " title="1 answers"> <span class="s-post-summary--stats-item-number">1</span> <span class="s-post-summary--stats-item-unit">回答</span> </div> <div class="s-post-summary--stats-item " title="964 views"> <span class="s-post-summary--stats-item-number">964</span> <span class="s-post-summary--stats-item-unit">浏览</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/12332621" class="s-link">python - 在命名空间声明不一致的文档上使用 iterparse,然后使用 xpath</a> </h3> <div class="s-post-summary--content-excerpt"> <p>我需要整理一段代码,将可能很大的 XML 文件解析为自定义 Python 对象。思路大致如下:</p> <p>问题是,有些文档有命名空间声明,有些则没有。这意味着在上面的代码中,<code>tag='Foo'</code>和<code>xpath</code>部分都不起作用。</p> <p>现在我一直在忍受丑陋的东西</p> <p>但这太糟糕了,即使它工作正常,我也想把它做好。(我想它也应该更慢。)</p> <p>有没有办法编写理智的代码来解释这两种情况<code>iterparse</code>?现在我只能想到捕获<code>start-ns</code>和<code>end-ns</code>事件并更新“状态保持”变量,我必须将其传递给循环中调用的函数来完成工作。然后该函数将<code>xpath</code>相应地构造查询。这是有道理的,但我想知道是否有更简单的方法。</p> <p>PS我显然已经尝试过四处搜索,但还没有找到一个既可以使用也可以不使用命名空间的解决方案。我也会接受从 XML 中消除名称空间的解决方案,但前提是它不会在进程中将整个树存储在 RAM 中。</p> </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags tags js-tags t-cñ t-ûnet t-aspûnet-mvc t-aspûnet-mvc-4 t-actionfilterattribute"> <a href="/tags/python" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">python</a><a href="/tags/xml-parsing" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">xml-parsing</a><a href="/tags/lxml" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">lxml</a><a href="/tags/xml-namespaces" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">xml-namespaces</a><a href="/tags/iterparse" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">iterparse</a> </div> <div class="s-user-card s-user-card__minimal"> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4"> </div> </div> <time class="s-user-card--time" style="margin-left:5px;"> <span title="2022-04-18 08:34:11Z" class="relativetime"> </span></time> </div> </div> </div> </div><div id="question-summary-71909431" class="s-post-summary js-post-summary" data-post-id="71909431" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">投票</span> </div> <div class="s-post-summary--stats-item " title="1 answers"> <span class="s-post-summary--stats-item-number">1</span> <span class="s-post-summary--stats-item-unit">回答</span> </div> <div class="s-post-summary--stats-item " title="410 views"> <span class="s-post-summary--stats-item-number">410</span> <span class="s-post-summary--stats-item-unit">浏览</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/12369852" class="s-link">python - 由于随后的 .clear() 无法遍历孩子的孩子?</a> </h3> <div class="s-post-summary--content-excerpt"> <p>我正在尝试使用本教程的<a href="http://lxml.de/tutorial.html#event-driven-parsing" rel="nofollow">“事件驱动解析”</a>部分中描述的模式。<code>lxml</code></p> <p>在我的代码中,我正在调用一个可以使用该<code>iterchildren()</code>方法在元素上递归运行的函数。我将在这里使用两个嵌套循环进行说明。</p> <p>这按预期工作:</p> <p>输出是<code><Element d at 0x2df49b0></code>。</p> <p>但如果我<code>.clear()</code>最后添加:</p> <p>-- 它不打印任何东西。为什么会这样,我该怎么做才能解决这个问题?</p> <p>笔记:</p> <ul> <li>我可以跳过<code>iterchildren</code>并执行<code>for c in elem</code>or <code>for c in list(elem)</code>,效果相同。</li> <li>我需要使用迭代方法来保持低内存使用率。</li> <li><p>在实际用例中,我正在使用属性进行元素查找:</p> /li> </ul> <p>我想解释一下如何<code>clear</code>在处理内部元素之前设法擦除它们,以及如何在需要处理祖先时将它们保存在内存中。</p> </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags tags js-tags t-cñ t-ûnet t-aspûnet-mvc t-aspûnet-mvc-4 t-actionfilterattribute"> <a href="/tags/python" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">python</a><a href="/tags/xml-parsing" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">xml-parsing</a><a href="/tags/lxml" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">lxml</a><a href="/tags/iterparse" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">iterparse</a> </div> <div class="s-user-card s-user-card__minimal"> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4"> </div> </div> <time class="s-user-card--time" style="margin-left:5px;"> <span title="2022-04-18 08:34:11Z" class="relativetime"> </span></time> </div> </div> </div> </div><div id="question-summary-71909431" class="s-post-summary js-post-summary" data-post-id="71909431" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">投票</span> </div> <div class="s-post-summary--stats-item " title="2 answers"> <span class="s-post-summary--stats-item-number">2</span> <span class="s-post-summary--stats-item-unit">回答</span> </div> <div class="s-post-summary--stats-item " title="29608 views"> <span class="s-post-summary--stats-item-number">29608</span> <span class="s-post-summary--stats-item-unit">浏览</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/12792998" class="s-link">python - ElementTree 迭代解析策略</a> </h3> <div class="s-post-summary--content-excerpt"> <p>我必须处理足够大(最大 1GB)的 xml 文档并用 python 解析它们。我正在使用<a href="http://effbot.org/zone/element-iterparse.htm" rel="noreferrer">iterparse()</a>函数(SAX 样式解析)。</p> <p>我关心的是以下,假设你有一个这样的 xml</p> <p>问题是,当然要知道我何时获得姓氏(如辛普森一家)以及何时获得该家庭成员之一的姓名(例如荷马)</p> <p>到目前为止我一直在做的是使用“开关”,它会告诉我我是否在“成员”标签内,代码看起来像这样</p> <p>这很好用,因为输出是</p> <p>我担心的是,对于这个(简单的)示例,我必须创建一个额外的变量来知道我在哪个标签(on_members_tag)中,想象一下我必须处理的真正的 xml 示例,它们有更多的嵌套标签。</p> <p>另请注意,这是一个非常简化的示例,因此您可以假设我可能面临一个带有更多标签、更多内部标签的 xml,并试图获取不同的标签名称、属性等。</p> <p>所以问题是。我在这里做一些非常愚蠢的事情吗?我觉得必须有一个更优雅的解决方案。</p> </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags tags js-tags t-cñ t-ûnet t-aspûnet-mvc t-aspûnet-mvc-4 t-actionfilterattribute"> <a href="/tags/python" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">python</a><a href="/tags/xml" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">xml</a><a href="/tags/sax" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">sax</a><a href="/tags/elementtree" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">elementtree</a><a href="/tags/iterparse" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">iterparse</a> </div> <div class="s-user-card s-user-card__minimal"> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4"> </div> </div> <time class="s-user-card--time" style="margin-left:5px;"> <span title="2022-04-18 08:34:11Z" class="relativetime"> </span></time> </div> </div> </div> </div><div id="question-summary-71909431" class="s-post-summary js-post-summary" data-post-id="71909431" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">投票</span> </div> <div class="s-post-summary--stats-item " title="2 answers"> <span class="s-post-summary--stats-item-number">2</span> <span class="s-post-summary--stats-item-unit">回答</span> </div> <div class="s-post-summary--stats-item " title="2468 views"> <span class="s-post-summary--stats-item-number">2468</span> <span class="s-post-summary--stats-item-unit">浏览</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/12882642" class="s-link">python - 如何在使用 cElementTree.iterparse() 时跳过引发错误的节点</a> </h3> <div class="s-post-summary--content-excerpt"> <p>我正在尝试解析一个非常大的 XML 文件并使用小写字母并删除标点符号。问题是,当我尝试使用<code>cET parse function</code>for big files 解析此文件时,有时会遇到格式错误的标签或字符,这会引发<code>syntax error</code>:</p> <p>注意:我几乎不可能读取文件,所以我看不出问题出在哪里。</p> <p>我怎样才能跳过或解决这个问题?</p> </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags tags js-tags t-cñ t-ûnet t-aspûnet-mvc t-aspûnet-mvc-4 t-actionfilterattribute"> <a href="/tags/python" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">python</a><a href="/tags/xml" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">xml</a><a href="/tags/iterparse" class="post-tag flex--item mt0 js-tagname-cñ" title="" rel="tag">iterparse</a> </div> <div class="s-user-card s-user-card__minimal"> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4"> </div> </div> <time class="s-user-card--time" style="margin-left:5px;"> <span title="2022-04-18 08:34:11Z" class="relativetime"> </span></time> </div> </div> </div> </div> </div> <br class="cbt"> <div class="s-pagination site1 themed pager float-left"> <a class="s-pagination--item js-pagination-item " href="/tags/iterparse?p=1" rel="" title="Go to page 2">1</a><a class="s-pagination--item js-pagination-item is-selected" href="/tags/iterparse?p=2" rel="" title="Go to page 2">2</a><a class="s-pagination--item js-pagination-item " href="/tags/iterparse?p=3" rel="" title="Go to page 2">3</a><a class="s-pagination--item js-pagination-item " href="/tags/iterparse?p=4" rel="" title="Go to page 2">4</a><a class="s-pagination--item js-pagination-item " href="/tags/iterparse?p=5" rel="" title="Go to page 2">5</a><a class="s-pagination--item js-pagination-item " href="/tags/iterparse?p=6" rel="" title="Go to page 2">6</a><a class="s-pagination--item js-pagination-item " href="/tags/iterparse?p=7" rel="" title="Go to page 2">7</a><a class="s-pagination--item js-pagination-item " href="/tags/iterparse?p=8" rel="" title="Go to page 2">8</a><a class="s-pagination--item js-pagination-item " href="/tags/iterparse?p=9" rel="" title="Go to page 2">9</a><a class="s-pagination--item js-pagination-item " href="/tags/iterparse?p=10" rel="" title="Go to page 2">10</a></div> </div> <div id="sidebar" class="show-votes" role="complementary" aria-label="sidebar"> <div class="module js-gps-related-tags" id="related-tags"> <h4 id="h-related-tags">Reference</h4> <div data-name="javascript"> <a href="https://php.github.net.cn" class="post-tag no-tag-menu js-gps-track" target="_blank">php</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">1429865</span> </span> </div> <div data-name="javascript"> <a href="https://c-cpp.com" class="post-tag no-tag-menu js-gps-track" target="_blank">c/c++</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">756500</span> </span> </div> <div data-name="javascript"> <a href="https://nginx.github.net.cn" class="post-tag no-tag-menu js-gps-track" target="_blank">nginx</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">49975</span> </span> </div> <div data-name="javascript"> <a href="https://mongodb.net.cn" class="post-tag no-tag-menu js-gps-track" target="_blank">mongodb</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">159057</span> </span> </div> <div data-name="javascript"> <a href="https://mybatis.net.cn" class="post-tag no-tag-menu js-gps-track" target="_blank">mybatis</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">3233</span> </span> </div> <div data-name="javascript"> <a href="https://anaconda.org.cn" class="post-tag no-tag-menu js-gps-track" target="_blank">anaconda</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">13410</span> </span> </div> <div data-name="javascript"> <a href="https://pycharm.net.cn" class="post-tag no-tag-menu js-gps-track" target="_blank">pycharm</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">14671</span> </span> </div> <div data-name="javascript"> <a href="https://python.github.net.cn" class="post-tag no-tag-menu js-gps-track" target="_blank">python</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">1902243</span> </span> </div> <div data-name="javascript"> <a href="https://vscode.github.net.cn" class="post-tag no-tag-menu js-gps-track" target="_blank">vscode</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">56040</span> </span> </div> <div data-name="javascript"> <a href="https://dockerdocs.cn" class="post-tag no-tag-menu js-gps-track" target="_blank">docker</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">110988</span> </span> </div> <div data-name="javascript"> <a href="https://github.net.cn" class="post-tag no-tag-menu js-gps-track" target="_blank">github</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">49000</span> </span> </div> <div data-name="javascript"> <a href="https://flask.github.net.cn" class="post-tag no-tag-menu js-gps-track" target="_blank">flask</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">49129</span> </span> </div> <div data-name="javascript"> <a href="https://ffmpeg.github.net.cn" class="post-tag no-tag-menu js-gps-track" target="_blank">ffmpeg</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">24037</span> </span> </div> <div data-name="javascript"> <a href="https://jmeter.net" class="post-tag no-tag-menu js-gps-track" target="_blank">jmeter</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">16910</span> </span> </div> <div data-name="javascript"> <a href="https://matplotlib.net" class="post-tag no-tag-menu js-gps-track" target="_blank">matplotlib</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">63493</span> </span> </div> <div data-name="javascript"> <a href="https://getbootstrap.net" class="post-tag no-tag-menu js-gps-track" target="_blank">bootstrap</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">54641</span> </span> </div> </div> </div> </div> </div> <footer id="footer" class="site-footer js-footer" role="contentinfo"> <div class="site-footer--container"> <div class="site-footer--logo"> <a href="https://stackoverflow.com"><svg aria-hidden="true" class="native svg-icon iconLogoGlyphMd" width="32" height="37" viewBox="0 0 32 37"><path d="M26 33v-9h4v13H0V24h4v9h22Z" fill="#BCBBBB"/><path d="m21.5 0-2.7 2 9.9 13.3 2.7-2L21.5 0ZM26 18.4 13.3 7.8l2.1-2.5 12.7 10.6-2.1 2.5ZM9.1 15.2l15 7 1.4-3-15-7-1.4 3Zm14 10.79.68-2.95-16.1-3.35L7 23l16.1 2.99ZM23 30H7v-3h16v3Z" fill="#F48024"/></svg></a> </div> <nav class="site-footer--nav"> <div class="site-footer--col"> <h5 class="-title"><a href="https://stackoverflow.org.cn" class="js-gps-track" data-gps-track="footer.click({ location: 3, link: 15})">Stack Overflow 中文网</a></h5> <p>遵从 CC BY-SA 知识共享许可协议。</p> </div> </nav> </div> </footer> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?709ff2ad9744e86b5b0eee677fc13ede"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-1MW5BV8G8E"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-1MW5BV8G8E'); </script> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-6117966252207595" crossorigin="anonymous"></script> </body> </html>