2012-04-13 9 views
1

拡張機能を渡して、その拡張機能を持つすべてのファイルを大文字と小文字の両方で取り出す必要があります。例えばグロブの小文字と大文字の扱い

私は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

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

関連する問題