我需要将扩展名传递给function,然后让该函数以小写和大写形式拉出具有该扩展名的所有文件。
例如,如果我通过mov
,我需要执行以下操作:
videos = [file for file in glob.glob(os.path.join(dir, '*.[mM][oO][vV]'))]
如果给出小写输入,我将如何完成上面的+ +上组合?
答案 0 :(得分:5)
这样的东西?
>>> def foo(extension):
... return '*.' + ''.join('[%s%s]' % (e.lower(), e.upper()) for e in extension)
...
>>> foo('mov')
'*.[mM][oO][vV]'
答案 1 :(得分:4)
由于glob只调用os.listdir
和fnmatch.fnmatch
,您可以自己致电listdir
,然后进行自己的匹配。如果您正在寻找的是一个匹配的扩展,那么这是一个非常简单的测试,并且不应该很难用正则表达式或[-3:]
答案 2 :(得分:0)
您可以轻松地在大写和小写之间转换字符串:
>>> ext = 'mov'
>>> ext.upper()
'MOV'
所以只需在你的函数中使用它。
答案 3 :(得分:0)
如果您在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']