2009-09-16 3 views
1

인사말,정규식 인수를 목록에 캐스팅

스크립트가 하나 이상의 파일에서 작동합니다. 나는 인수로 파일 이름 (정규식 포함)을 전달하여 목록에 넣기를 원합니다. 가장 좋은 방법은 무엇입니까?

script.py file[1-3].nC#would create list [file1.nc, file2.nc, file3.nc] that I can work on 
script.py file*.nC#would scan the folder for matching patterns and create a list 
script.py file1.nc file15.nc booba[1-2].nC#creates [file1.nc, file15.nc, booba1.nc, booba2.nc] 
+0

정상적인 쉘을 사용하는 리눅스 시스템을 사용하고 있다면, 스크립트에 순조롭게 전달되기를 기대한다면 이러한 인수를 적절히 인용해야합니다 : script.py 'file [1-3] .nc' –

답변

4

glob 모듈은

확인에 대한 예제를 찾고있는 것을 정확히 :

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

당신은 optparse를 사용하거나 인수를 얻을 sys.argv에 있습니다. 그리고 그것을 glob에 전달하십시오.

1

업데이트 :

예를 들어, 나는 다음과 같은 주장을 받아 들일 유닉스에서 쉘은 당신이 원하는 예를 확장 할 것입니다. Windows에서는 그렇지 않으며 glob.glob()를 사용해야합니다.

do want regexp : 그러면 listdir을 사용하여 디렉토리를 나열하고 파일 이름을 regexp 패턴과 일치시켜야합니다. 또한 매개 변수를 따옴표로 묶어야합니다 (적어도 유닉스에서는). 그래서 그것을 확장하지 않습니다. :-)

+0

사실 glob은 [0-9]와 같은 범위를 지원합니다. –

+0

regex를 잊어 버리십시오, glob는 정확하게 이것을 위해 만들어졌습니다. 파일 * .nc가 fil.nc, file_fooey.nc 등이 아닌 file.nc, file.nc, fileeeee.nc 등이 일치하기를 원하기 때문에이 예제는 정규식에 관한 것이 아닙니다. 그리고 Unix가 당신을 위해 일합니다. –

+0

@ 닉 D : 오, 나는 몰랐다. 그럼. 그렇다. –