2011-06-01 4 views
1

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

Мой код выглядит как это:

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) 

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

+0

насчет '.endswith()' (http://docs.python.org/library/stdtypes.html#str.endswith) или '.splitext()' (HTTP: // документы .python.org/библиотека/os.path.html # os.path.splitext)? – arie

+0

Шаг 1: поиск всех остальных с одинаковой совпадением имени файла. http://stackoverflow.com/search?q=%5Bpython%5D+filename+match Шаг 2. Выберите аналогичный вопрос. http://stackoverflow.com/questions/296173/how-do-i-copy-files-with-specific-file-extension-to-a-folder-in-my-python-versio. Шаг 3: Прочтите, что сделали другие. –

+0

Это не то же самое, что я пытаюсь сделать. Я просто хочу сопоставить некоторый текст в атрибуте elements. – Matthew

ответ

2

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

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

Спасибо, что очень полезно – Matthew

Смежные вопросы