简化Python代码?

时间:2014-07-21 18:13:38

标签: python regex

我想编写一个Python脚本,下载一个充满链接的数组的每张图片。

代码如下所示:

for url in array:
    if 'jpg' in url or 'jpeg' in url or 'png' in url or 'gif' in url:
        print url

正如您所看到的,if语句非常低效,我想简化它。如果可能的话,最好使用正则表达式。有人可以帮助我吗?

5 个答案:

答案 0 :(得分:9)

正则表达式不是正确的工具,因为你不匹配模式,只是寻找子串。

相反,您应该使用anygenerator expression

if any(x in url for x in ('jpg', 'jpeg', 'png', 'gif')):

作为奖励,此解决方案与您当前的解决方案一样懒惰(它只根据需要执行尽可能多的in成员资格测试)

答案 1 :(得分:2)

虽然这不一样,但你打算做的更多:

for url in array:
    if url.rsplit('.',1)[1] in ('jpg', 'jpeg', 'png', 'gif'):
        print url

答案 2 :(得分:2)

您可能不需要正则表达式来执行此操作,但如果您仍然需要,请执行以下操作:

http://regex101.com/r/jH8fO4/3< - 请参阅正在执行的正则表达式。

^.*\.(jpeg|jpg|png|gif)$

您当然可以在表达式的末尾添加更多内容,以便处理请求或变量附加到网址的情况。

编辑 - 更新以符合文件名中多于1个点的可能性:

http://regex101.com/r/jH8fO4/4 ^[a-z0-9]*\.{1}(jpeg|jpg|png|gif)$

答案 3 :(得分:0)

使用正则表达式做同样的事情看起来像这样。

pattern = re.compile('jpg|jpeg|png|gif')

for url in array:
    if pattern.search(url) is not None:
        print url

答案 4 :(得分:0)

我会使用os.path.splitext:

import os
for url in array:
    _, ext = os.path.splitext(url)
    if ext in ('.jpg', '.jpeg', '.png', '.gif'):
        print url