Примечание. Я нахожусь в Windows 7, 64-разрядной системе - только что установленный cygwin.Извлечение данных между тегами из огромных текстовых (XML) файлов
Мне нужно извлечь большие объемы данных из большого количества больших (100 МБ) 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 предпочитает, но unix для сценария для cygwin было бы удобно. Я предпочитаю исходный код для любого исполняемого файла, где я не вижу, что делает источник.
Между тем, я продолжаю самостоятельно. Заранее спасибо.
Для точных данных, я загрузив этот файл (например): 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)
Когда я делаю это, она дает окончательное значение я из 9. Если получали ВСЮ «мы-патентно-гранта ', я ожидал бы, что у меня будет больше 6000, что указывает на то, что он не может анализировать весь файл.
Я смотрю на это прямо сейчас. Проблема у меня с ним в том, что каждый из этих огромных файлов содержат тысячи сцепленных документов XML - и я не уверен, но я думаю, что BS только читает первый. Просматривая документы сейчас. – elbillaf
@elbillaf Я однажды перечислил одну страницу группы facebook около 50000 сообщений, включая комментарии, но beautifulsoup сломал ее и проанализировал ее в 10 секунд на моем 4GB RAM macbook. Кроме того, я предлагаю, что относительно разделения конкатенированных XML-документов? –
Я не знаю, что вы предлагаете. – elbillaf