2

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

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

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

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

4

4 回答 4

6

像这样的东西?

>>> def foo(extension):
...     return '*.' + ''.join('[%s%s]' % (e.lower(), e.upper()) for e in extension)
... 
>>> foo('mov')
'*.[mM][oO][vV]'
于 2012-04-13T21:02:35.743 回答
5

由于glob只是调用os.listdirand fnmatch.fnmatch,所以你可以调用listdir自己,并进行自己的匹配。如果您正在寻找的只是一个匹配的扩展,这是一个非常简单的测试,并且应该不难写成正则表达式或使用[-3:]

于 2012-04-13T21:00:37.970 回答
0

您可以轻松地在大写和小写之间转换字符串:

>>> ext = 'mov'
>>> ext.upper()
'MOV'

所以只需在你的函数中使用它。

于 2012-04-13T21:04:52.763 回答
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']

有关子流程的更多详细信息

于 2012-04-13T21:52:04.833 回答