在glob中考虑小写和大写

时间:2012-04-13 20:57:11

标签: python

我需要将扩展​​名传递给function,然后让该函数以小写和大写形式拉出具有该扩展名的所有文件。

例如,如果我通过mov,我需要执行以下操作:

videos = [file for file in glob.glob(os.path.join(dir, '*.[mM][oO][vV]'))] 

如果给出小写输入,我将如何完成上面的+ +上组合?

4 个答案:

答案 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.listdirfnmatch.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']

more detail on subprocess