2010-07-27 3 views

답변

59

는 :

>>> import glob 
>>> glob.glob('./[0-9].*') 
['./1.gif', './2.txt'] 
>>> glob.glob('*.gif') 
['1.gif', 'card.gif'] 
>>> glob.glob('?.gif') 
['1.gif'] 

이 여기에서 바로 제공 : http://docs.python.org/library/glob.html

+2

이 사용중인 쉘에 따라 매우 정확하지 않습니다. –

3
from glob import glob 
import sys 

files = glob(sys.argv[1]) 
17

glob는하지만, 파이썬에서이에서 일을하는 경우에 유용합니다, 당신의 쉘이 전달되지 않을 수 있습니다 * (저는 Windows 쉘에 익숙하지 않습니다). 나는 다음 작업을 수행 할 때 예를 들어

: 내 껍질에

import sys 
print sys.argv 

, 내가 입력 : argv하지 않는

['test.py', 'test.jpg', 'wasp.jpg'] 

공지 것을 :

$ python test.py *.jpg 

내가이 얻을 포함 "*.jpg"

여기에서 중요한 교훈은 대부분의 셸이 응용 프로그램에 전달되기 전에 셸에서 별표를으로 확장한다는 것입니다.

이 경우 파일 목록을 얻으려면 sys.argv[1:]을 사용하면됩니다. 또는 *을 탈출하여 파이썬이 리터럴 *을 볼 수 있도록 할 수 있습니다. 그런 다음 glob 모듈을 사용할 수 있습니다. 난 당신이 스크립트는 여러 쉘과 *를 사용하여 여러 매개 변수를 사용하여 작업 할 때 매우 유용하다고 때문에

$ getFileNames.py "*.jpg" 

또는

$ getFileNames.py \*.jpg 
0

나는 이전에이를 추가하고있다.

당신은 모든 쉘에서 작동 뭔가를 원한다면, 당신은 (여전히 glob 사용) 다음을 수행 할 수 당신이 test 파일이 있고 t*을 줄 경우는 (중복 생성 할 수 있음을

>>> import glob 
>>> from functools import reduce # if using python 3+ 
>>> reduce(lambda r, x: r + glob.glob(x), sys.argv[1:], []) 

te*),하지만 당신은 단순히 set 사용하여 제거 할 수 있습니다

도널드 광부가 다른 대답에서 지적한대로
>>> set(reduce(lambda r, x: r + glob.glob(x), sys.argv[1:], [])) 
관련 문제