반응형
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
반응형
'파이썬' 카테고리의 다른 글
| 파이썬 Python : 디렉토리에서 확장자가 .MP3 인 최신 파일 찾기 (0) | 2021.01.09 |
|---|---|
| 파이썬 ImportError : matplotlib에는 dateutil이 필요합니다. (0) | 2021.01.09 |
| 파이썬 큰 따옴표를 기본 따옴표 형식으로 사용하여 Python 사전을 만드는 방법은 무엇입니까? (0) | 2021.01.09 |
| 파이썬 인덱스 판다 데이터 프레임 비활성화 (0) | 2021.01.09 |
| 파이썬이 파일 내용을 인쇄하도록하는 방법 (0) | 2021.01.09 |
댓글