Базовый поиск файлов Python и ввод / вывод - PullRequest
5 голосов
/ 18 октября 2010

Я пытаюсь выполнить простую задачу в Python, и я новичок в этом языке (я C ++). Я надеюсь, что кто-то сможет указать мне правильное направление.

Проблема: У меня есть XML-файл (12 МБ), полный данных, и в нем есть начальные теги 'xmltag' и конечные теги '/ xmltag', которые представляют начало и конец разделов данных, которые я хотел бы извлечь.

Я бы хотел просмотреть этот открытый файл с помощью цикла и для каждого экземпляра найти начальный тег и скопировать данные в разделе в новый файл до конечного тега. Затем я хотел бы повторить это до конца файла.

Я доволен файловым вводом / выводом, но не самым эффективным циклом, поиском и извлечением данных.

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

Большое спасибо!

Ответы [ 5 ]

3 голосов
/ 18 октября 2010

Чек BeautifulSoup

from BeautifulSoup import BeautifulSoup

with open('bigfile.xml', 'r') as xml:
    soup = BeautifulSoup(xml):
    for xmltag in soup('xmltag'):
        print xmltag.contents
2 голосов
/ 18 октября 2010

У погружения в Python 3 есть большая глава об этом:

Отличная бесплатная книга о питоне, которую стоит прочитать!

1 голос
/ 18 октября 2010

Ответ BeautifulSoup хорош, но он выполняется быстрее и не требует внешней библиотеки:

import xml.etree.cElementTree as ET
tree = ET.parse('xmlfile.xml')
results = (elem for elem in tree.getiterator('xmltag'))

# in Python 2.7+, getiterator() is deprecated; use tree.iter('xmltag')
0 голосов
/ 18 октября 2010

Нет необходимости устанавливать BeautifulSoup, Python включает парсер ElementTree в своей стандартной библиотеке.

from xml.etree import cElementTree as ET
tree = ET.parse('myfilename')
new_tree = ET('new_root_element')
for element in tree.findall('.//xmltag'):
    new_tree.append(tree.element)
print ET.tostring(new_tree)
0 голосов
/ 18 октября 2010
xml=open("xmlfile").read()
x=xml.split("</xmltag>")
for block in x:
    if "<xmltag>" in block:
        print block.split("<xmltag>")[-1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...