以python / lowercase和大写扩展文件过滤文件列表

时间:2013-07-21 21:52:40

标签: python-3.x filter lambda

我正在使用以下行过滤我的文件列表:

MyList = filter(lambda x:x.endswith(('。doc','。txt','。dat')),os.listdir(path))

上面的行只会过滤小写的扩展文件。因此,是否有一种优雅的方法可以过滤掉大写的扩展文件?

2 个答案:

答案 0 :(得分:3)

您只需要在lambda函数中添加.lower()

MyList = filter(lambda x: x.lower().endswith(('.doc','.txt','.dat')), os.listdir(path))

我更喜欢将os.path.splitext与列表理解

一起使用
from os.path import splitext
my_list = [x for x in os.listdir(path) if splitext(x)[1].lower() in {'.doc', '.txt', '.dat'}]

单行还是有点多,所以也许

from os.path import splitext

def valid_extension(x, valid={'.doc', '.txt', '.dat'}):
    return splitext(x)[1].lower() in valid

my_list = [x for x in os.listdir(path) if valid_extension(x)]

答案 1 :(得分:0)

import os
import re
pat = re.compile(r'[.](doc|txt|dat)$', re.IGNORECASE)
filenames = [filename for filename in os.listdir(path)
             if re.search(pat, filename)]
print(filenames)