Python开发 - elementtree XML和字符串操作

1 投票
1 回答
683 浏览
提问于 2025-04-16 18:45

我正在使用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)

现在,如果只有一种文件类型,那就没问题了,但这里面有三种类型(jpg、flv和mp4)。所以当我在视图中循环查看这些文件时,它们会被一一列出来,但如果我只想抓取flv文件,或者只想要mp4文件,该怎么做呢?而且它们在列表中的顺序也不是固定的。

有没有办法可以判断文件名是否以.mp4结尾,然后执行某个操作?或者在模板中也能做到这一点吗?

如果我尝试这样做:

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

我会遇到一个错误,提示元组对象没有这个属性endswith。这为什么是一个元组?我以为它是一个字典呢?

1 个回答

2

你得到一个元组是因为你给url.get()提供了一个元组(用括号表示)作为默认返回值。如果你提供一个空字符串,就可以使用它的.endswith()方法。另外,注意这个元素本身也有一个get()方法,可以用来获取属性值(你不需要通过.attrib来获取)。举个例子:

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

撰写回答