2013-04-22 4 views
6

파이썬이 파일을 반복 할 때 파일을 배열하는 방법을 아는 사람이 있습니까? 고정 된 순서로 폴더의 일부 파일을 반복해야하지만 파일 이름에 따라 영숫자를 사용하는 것이 좋습니다. 그러나 Python은 임의 순서로 반복됩니다.파이썬 - 파일 반복 - 순서

filelist = glob.glob(os.path.join(path, 'FV/*.txt')) 
for infile in filelist: 
    #do some fancy stuff 
    print str(infile) 

을하고, 파일 이름은 나에게 정말 명확하지 순서로 인쇄됩니다 은 지금까지 나는이 코드를 사용하고 있습니다.

해당 루프의 특정 순서를 미리 정의 할 수있는 간단한 방법이 있습니까? 감사합니다. .. 은 (glob.glob() 항목을 주문하는 어떤 매개 변수를 사용 없다는 것을 대안을 고려있어

+2

단지 완성도를 위해서 : 파일을 반복하면서 os.listdir을 자주 사용하려면 (* .txt를 확장하려고하므로 ...). – born

답변

11

문서에서 볼 수있는 한 glob.glob()에는 정의 된 순서가 없습니다. 이 감안할 때, 확인하는 가장 쉬운 방법은 목록은 반환 정렬 할 수 있습니다 :

filelist = glob.glob(os.path.join(path, 'FV/*.txt')) 
for infile in sorted(filelist): 
    #do some fancy stuff 
    print str(infile) 

이 단지 종류의 문자열로 것이다 - 당신이 찾고 있던 간단한 고정 된 순서를 제공합니다. 특정 순서가 필요한 경우 sorted()은 정렬 순서를 제공하는 함수 인 키워드 인수로 key을 사용합니다. 자세한 내용은 이전에 링크 된 설명서를 참조하십시오.

+0

나를 이길. 영숫자는 문자열의 기본 정렬입니다. 맞습니까?+1 – BlackVegetable

+0

@BlackVegetable 네, 단순한 정렬 일 겁니다. 분명히 원한다면 정렬 할 수있는'key' 함수를 정의 할 수 있습니다. –

+0

아마도 '역방향'에 대한 정보와 함께 해당 정보를 포함하도록 답을 편집 할 수 있습니까? – BlackVegetable

-3
import os 
for root, dirs, files in os.walk(os.path.join(path, 'FV/'), topdown=True): 
    print root 
    print files.sort(reverse=True) 

은, 난 그냥 도움이 될 수있는 매개 변수를 사용하고 내가 downvotes 있다고 생각 .. walk()입니다 glob.glob()에 대한 대안을 제시 불공평하지만 모두들 의견에 대한 권리가 있습니다 .-)

+0

-1, 이것은 같지 않습니다. 'walk()'는 모든 파일을주고 하위 디렉토리로갑니다. –

+0

은 하위 디렉토리에 들어가기를 원하지 않으면 끊어집니다. 'walk()'는 당신에게 제어권을 주며, 당신이 명시 적으로 원하지 않는 일을하지 않습니다. – Torxed

+2

하위 디렉토리로 돌아가고 싶지 않을 때'walk'를 사용하는 것은 바보입니다. 그리고 당신이 주장하는대로 '걷다'가 알파벳 순서로 파일을 제공한다는 보장은 없습니다. – interjay