본문 바로가기
파이썬

파이썬 os.walk는 어떤 순서로 반복을 반복합니까?

by º기록 2021. 1. 9.
반응형

os.walk () 에 의해 주어진 파일과 디렉토리의 순서가 걱정됩니다. 이러한 디렉터리가있는 경우 1 , 10 , 11 , 12 , 2 , 20 , 21 , 22 , 3 , 30 , 31 , 32 , 출력 목록의 순서는 무엇입니까?

숫자 값으로 정렬되어 있습니까?

1 2 3 10 20 30 11 21 31 12 22 32

아니면 ls 가 제공하는 것과 같이 ASCII 값으로 정렬합니까?

1 10 11 12 2 20 21 22 3 30 31 32

또한 특정 정렬을 얻으려면 어떻게해야합니까?

 

해결 방법

 

os.walk os.listdir 을 사용합니다. 다음은 os.listdir 의 독 스트링입니다.

listdir (경로)-> list_of_strings

디렉토리의 항목 이름이 포함 된 목록을 반환합니다.

path: path of directory to list

목록은 임의의 순서입니다 . 그것은 특별한 것을 포함하지 않습니다 항목 '.' 및 '..'이 디렉토리에있는 경우에도 마찬가지입니다.

(내 강조).

그러나 sort 를 사용하여 원하는 순서를 확인할 수 있습니다.

for root, dirs, files in os.walk(path):
   for dirname in sorted(dirs):
        print(dirname)

(디렉터리 이름은 정수가 아닌 문자열이므로 sorted (dirs) 는 문자열로 정렬합니다.

Alfe와 Ciro Santilli가 지적했듯이 디렉터리를 정렬 된 순서로 반복 하려면 디렉터리 제자리 로 수정합니다.

for root, dirs, files in os.walk(path):
   dirs.sort()
   for dirname in dirs:
        print(os.path.join(root, dirname))

직접 테스트 할 수 있습니다.

import os

os.chdir('/tmp/tmp')
for dirname in '1 10 11 12 2 20 21 22 3 30 31 32'.split():
     try:
          os.makedirs(dirname)
     except OSError: pass


for root, dirs, files in os.walk('.'):
   for dirname in sorted(dirs):
        print(dirname)

인쇄물

1
10
11
12
2
20
21
22
3
30
31
32

숫자 순서로 나열하려면 다음을 사용하십시오.

for dirname in sorted(dirs, key=int):


 

참조 페이지 https://stackoverflow.com/questions/18282370

 

 

반응형

댓글