我需要将扩展名传递给函数,然后让该函数以小写和大写形式提取具有该扩展名的所有文件。
例如,如果我通过了mov
,我需要执行以下操作:
videos = [file for file in glob.glob(os.path.join(dir, '*.[mM][oO][vV]'))]
给定小写输入,我将如何完成上面的小写+大写组合?
我需要将扩展名传递给函数,然后让该函数以小写和大写形式提取具有该扩展名的所有文件。
例如,如果我通过了mov
,我需要执行以下操作:
videos = [file for file in glob.glob(os.path.join(dir, '*.[mM][oO][vV]'))]
给定小写输入,我将如何完成上面的小写+大写组合?
像这样的东西?
>>> def foo(extension):
... return '*.' + ''.join('[%s%s]' % (e.lower(), e.upper()) for e in extension)
...
>>> foo('mov')
'*.[mM][oO][vV]'
由于glob只是调用os.listdir
and fnmatch.fnmatch
,所以你可以调用listdir
自己,并进行自己的匹配。如果您正在寻找的只是一个匹配的扩展,这是一个非常简单的测试,并且应该不难写成正则表达式或使用[-3:]
您可以轻松地在大写和小写之间转换字符串:
>>> ext = 'mov'
>>> ext.upper()
'MOV'
所以只需在你的函数中使用它。
如果您在 Unix 上运行它,您可以尝试调用它:
from subprocess import Popen, PIPE
#replace the "/tmp/test/" and "*.test" with your search path and extension
args = ["find", "/tmp/test/", "-iname", "*.test"]
files = Popen(args, stdout=PIPE).stdout.readlines()
>>> files
['/tmp/test/a.Test\n', '/tmp/test/a.TEST\n', '/tmp/test/a.TeST\n', '/tmp/test/a.test\n']