2013-10-29 2 views
1

에 glob.glob 함께 주문 :내가 파일의 목록을 가지고 파이썬

foo_00.txt 
foo_01.txt 
foo_02.txt 
foo_03.txt 
foo_04.txt 
foo_05.txt 
foo_06.txt 
foo_07.txt 
foo_08.txt 
foo_09.txt 
foo_10.txt 
foo_11.txt 
......... 
......... 
foo_100.txt 
foo_101.txt 

내가 사용할 때

import glob 
PATH = "C:\testfoo" 
listing = glob.glob(os.path.join(PATH, '*.txt')) 

내가 가진 나는 또한 sorted(glob.glob(os.path.join(PATH, '*.txt')))을 시도

foo_00.txt 
    foo_01.txt 
    foo_02.txt 
    foo_03.txt 
    foo_04.txt 
    foo_05.txt 
    foo_06.txt 
    foo_07.txt 
    foo_08.txt 
    foo_09.txt 
    foo_100.txt 
    foo_101.txt 
    ......... 
    ......... 
    foo_10.txt 
    foo_11.txt 
    ......... 

이 순서 만 내가 올바른 순서를 가지기를 원하기 때문에 내 문제를 해결하지 않고. foo_09.txt 이후에 foo_10.txt가 아닌 foo_10.txt를 가져오고 싶습니다.

+0

그리고 문제는 ...... ......? –

+0

내가 분명하지 않으면 미안 해요. 나는 올바른 순서를 갖고 싶다. foo_09.txt 이후에 foo_100.txt가 아닌 foo_10.txt를 가져 오려고합니다. –

+0

자연수 정렬이 필요합니다. 이미 여기에 몇 가지 질문이 있습니다. –

답변

8

특수한 key 함수를 사용할 수 있습니다.

sorted(files, key=lambda name: int(name[4:-4])) 

이것은 무엇입니까? foo_100.txt은 처음 4 자 및 4자를 제거하고 나머지는 int으로 변환하고 해당 값을 기준으로 정렬합니다.

물론 모든 파일의 접두어와 확장자가 같은 경우에만 작동하며 다른 파일 이름에 다른 번호를 사용해야 할 수도 있습니다. 또는 split 문자열 또는 정규식 메서드를 사용하여 키 함수에서 숫자 부분을 추출 할 수 있습니다.

관련 문제