【发布时间】:2015-05-13 13:12:30
【问题描述】:
注意:我使用的是 Windows 7 64 位系统 - 刚刚安装了 cygwin。
我需要从大量不同的大型(100 MB)XML 文件中提取大量数据。 xml 文件包含一堆行序列,如下所示:
<taggie>
lotsolines which include some string that I'm searching for.
</taggie>
我想提取从开始标签到包含搜索字符串的结束标签的所有内容。 (是在 python 中执行此操作还是在 cygwin 中执行此操作是一个折腾。)
我的计划是编写一个脚本,从这些 xml 文件中预处理出开始和结束标记表,并为开始-结束创建一个行号参考表。 类似的东西
filename, start line (begin tag), end line (end tag)
bogusname.xml, 50025, 100003
然后我再次搜索以创建我的字符串出现位置的列表。 它可能看起来像这样。
filename, searchstring, line number
bogusname.xml, "foo", 76543
然后我根据第一个列表处理第二个列表,以提取信息(可能到第二个大文件或一组文件中。我现在不在乎。
不管怎样,当我这样做时,我突然想到,几乎可以肯定有人做了这件事或与之非常相似的事情。
那么,任何人都可以指导我使用已经这样做的代码吗?首选 Python,但 cygwin 的 unix 样式脚本会很方便。我更喜欢源代码而不是任何我看不到源代码在做什么的可执行文件。
与此同时,我正在独自进行。提前致谢。
对于确切的数据,我正在下载这个文件(例如): http://storage.googleapis.com/patents/grant_full_text/2015/ipg150106.zip 我解压缩它,我想提取那些包含大量搜索字符串的 XML 文档。这是一个包含数千个连接的 XML 文档的单个文件。我想提取任何包含搜索字符串之一的 XML。
我目前正在尝试使用 BeautifulSoup:
from __future__ import print_function
from bs4 import BeautifulSoup # To get everything
import urllib2
xml_handle = open("t.xml", "r")
soup = BeautifulSoup(xml_handle)
i = 0
for grant in soup('us-patent-grant'):
i = i + 1
print (i)
print (grant)
print (i)
当我这样做时,它给出的 i 的最终值为 9。 如果它获得了所有的“us-patent-grant”标签,我希望 i 超过 6000 - 这表明它可能没有解析整个文件。
【问题讨论】:
标签: xml tags extraction