Извлечение данных из файла .txt с использованием Python - PullRequest
1 голос
/ 18 января 2011

Я много, много XML-файлов, и мне нужно извлечь некоторые координаты из них. Извлечение данных напрямую из XML-файлов кажется очень и очень сложным, поэтому я работаю над сохранением XML-файлов в виде TXT-файлов и извлечением данных таким образом. Однако, когда я открываю файл .txt, все мои данные сгруппированы примерно в 6 строк ... И все найденные мною сценарии выбирают данные, читая первое слово в каждой строке ... но, очевидно, этого не произойдет. работа для меня! Мне нужно извлечь числа между этими комментариями:

<gml:lowerCorner>137796 483752</gml:lowerCorner> <gml:upperCorner>138178 484222</gml:upperCorner>

В текстовом файле они все сгруппированы вместе! Кто-нибудь знает, как извлечь эти данные? Спасибо!

Ответы [ 4 ]

15 голосов
/ 18 января 2011

Это абсолютно неправильный подход . Оставь это в покое и улучшай свои пути :-)

Серьезно, если файл XML, то просто используйте XML-парсер, чтобы прочитать его. Изучить, как это сделать в Python, не сложно, и это сделает вашу жизнь проще и намного проще в будущем, когда вы можете столкнуться с более сложными потребностями синтаксического анализа и вам не придется заново изучать его. *

Посмотрите на xml.etree.ElementTree.ElementTree. Вот пример кода:

>>> from xml.etree.ElementTree import ElementTree
>>> tree = ElementTree()
>>> tree.parse("your_xml_file.xml")

Теперь просто прочитайте документацию к модулю и посмотрите, что вы можете сделать с tree. Вы будете удивлены, узнав, как просто получить информацию таким образом. Если у вас есть конкретные вопросы по извлечению данных, я предлагаю вам открыть еще один вопрос, в котором вы указываете формат файла XML, который вы должны анализировать, и какие данные вы должны извлечь из него. Я уверен, что вам предложат рабочий код в считанные минуты.

1 голос
/ 01 сентября 2011

Вы также можете открыть файл .xml скрипта python при открытии файла .txt.

    data = open("file.xml")
    xml = data.read()

Тогда вы можете использовать регулярные выражения, чтобы найти те цифры, которые вам так нужны.

0 голосов
/ 23 июня 2015

Главный ответ по-прежнему является лучшим ответом.Тем не менее, я делал это только с HTML и по этой ссылке lxml и xpath идеально.

Откройте браузер на интересующем сайте (или данных)В Chrome щелкните правой кнопкой мыши и «Проверьте элемент».В окне разработчика на выделенном тексте снова щелкните правой кнопкой мыши и выберите «Копировать XPath».Для google.com и нажатия на главное окно поиска я получаю следующий XPath.

//*[@id="lst-ib"]

Вы можете использовать lxml для получения различных данных из этого элемента.Посмотрите, что вы получите, добавив text () или @value или @href в конце.

0 голосов
/ 18 января 2011

Для действительно простого XML я просто использую регулярное выражение, не стоит беспокоиться о том, чтобы запустить медленный синтаксический анализатор XML для простого пакета XML.

In [1]: data = open("file.txt","r").read()

In [2]: import re

In [3]: re.compile("([\d]+)").findall(data)
Out[3]: ['137796', '483752', '138178', '484222']
...