2012-04-13 77 views
1

我需要將擴展​​名傳遞給函數,然後讓該函數以大寫和小寫形式將所有帶有該擴展名的文件都拉出來。在glob中的大寫和小寫的會計處理

例如,如果我通過mov,我需要的功能做:

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

我將如何完成上面給出小寫輸入下+上的組合?

回答

5

這樣的事情?

>>> def foo(extension): 
...  return '*.' + ''.join('[%s%s]' % (e.lower(), e.upper()) for e in extension) 
... 
>>> foo('mov') 
'*.[mM][oO][vV]' 
4

由於glob只需撥打os.listdirfnmatch.fnmatch,您可以自己撥打listdir,並進行自己的匹配。如果你正在尋找的是一個匹配的擴展名,這是一個非常簡單的測試,不應該很難寫成正則表達式或[-3:]

+2

或 「blah.mOv」 .lower()的endsWith( 「MOV」)。 – Darthfett 2012-04-13 21:02:35

0

您可以轉換之間的字符串大小寫容易:

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

所以只需要使用您的功能。

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