Разработка на Python - elementtree XML и строковые операции - PullRequest
1 голос
/ 01 июня 2011

Я использую ElementTree , чтобы загрузить серию файлов XML и проанализировать их. Когда файл анализируется, я извлекаю из него несколько бит данных (заголовок и абзац текста). Затем мне нужно получить некоторые имена файлов, которые хранятся в XML. Они содержатся в элементе под названием ContentItem.

Мой код выглядит примерно так:

for item in dirlist:
    newsML = ET.parse(item)
    NewsLines = newsML.getroot()
    HeadLine = NewsLines.getiterator("HeadLine")
    result.append(HeadLine)
    p = NewsLines.getiterator("p")
    result.append(p)
    ci = NewsLines.getiterator("ContentItem")
    for i in ci:
        result.append(i.attrib)

Теперь, если бы был только один тип файла, это было бы хорошо, но он содержит 3 типа (jpg, flv и mp4). Так что, когда я перебираю их в представлении, они выплевываются, но как мне просто взять FLV, если я только хочу это? или только mp4? Они не всегда появляются в списке в одном и том же порядке.

Есть ли способ сказать, заканчивается ли он на .mp4, затем выполнить это действие, или есть ли способ сделать это даже в шаблоне?

Если я попытаюсь сделать это;

        url = i.attrib
        if url.get("Href", () ).endswith('jpg'):
            result.append(i.attrib)

Я получаю сообщение об ошибке: объект кортежа не имеет атрибута заканчивается. Почему это кортеж? Я думал, что это был диктат?

1 Ответ

2 голосов
/ 01 июня 2011

Вы получаете кортеж, потому что вы предоставляете кортеж (скобки) в качестве значения по умолчанию для url.get().Укажите пустую строку, и вы можете использовать ее метод .endswith().Также обратите внимание, что сам элемент имеет метод get() для получения значений атрибутов (вам не нужно проходить через .attrib).Пример:

if i.get('Href', '').endswith('.jpg'):
    result.append(i.attrib)
...