[PYTHON] 디렉토리의 파일 이름을 오름차순으로 정렬 [duplicate]
PYTHON디렉토리의 파일 이름을 오름차순으로 정렬 [duplicate]
나는 jpgs와 다른 파일들로 된 디렉토리를 가지고있다. jpgs는 모두 파일명이 들어있다. 일부 파일 이름에 추가 문자열이있을 수 있습니다.
예를 들어.
01.jpg
또는 그것이 될 수있다.
Picture 03.jpg
파이썬에서는 모든 jpg 목록을 오름차순으로 필요로합니다. 이 코드 스 니펫은 다음과 같습니다.
import os
import numpy as np
myimages = [] #list of image filenames
dirFiles = os.listdir('.') #list of directory files
dirFiles.sort() #good initial sort but doesnt sort numerically very well
sorted(dirFiles) #sort numerically in ascending order
for files in dirFiles: #filter out all non jpgs
if '.jpg' in files:
myimages.append(files)
print len(myimages)
print myimages
내가 얻는 것은 이것이다.
['0.jpg', '1.jpg', '10.jpg', '11.jpg', '12.jpg', '13.jpg', '14.jpg',
'15.jpg', '16.jpg', '17.jpg', '18.jpg', '19.jpg', '2.jpg', '20.jpg',
'21.jpg', '22.jpg', '23.jpg', '24.jpg', '25.jpg', '26.jpg', '27.jpg',
'28.jpg', '29.jpg', '3.jpg', '30.jpg', '31.jpg', '32.jpg', '33.jpg',
'34.jpg', '35.jpg', '36.jpg', '37.jpg', '4.jpg', '5.jpg', '6.jpg',
'7.jpg', '8.jpg', '9.jpg']
분명히 가장 중요한 숫자를 먼저 맹목적으로 분류합니다. sorted ()를 사용하여 시도했는데, 문제가 해결 될 것이라고 기대할 수는 있지만 아무런 차이가 없다는 것을 알 수 있습니다.
해결법
-
==============================
1.각 파일 이름에 하나의 숫자 만 있다고 가정합니다.
각 파일 이름에 하나의 숫자 만 있다고 가정합니다.
>>> dirFiles = ['Picture 03.jpg', '02.jpg', '1.jpg'] >>> dirFiles.sort(key=lambda f: int(filter(str.isdigit, f))) >>> dirFiles ['1.jpg', '02.jpg', 'Picture 03.jpg']
-
==============================
2.모듈 natsort가 있습니다. 그냥 pip install natsort를 수행하십시오.
모듈 natsort가 있습니다. 그냥 pip install natsort를 수행하십시오.
>>> import natsort >>> ll = ['Picture 13.jpg', 'Picture 14.jpg', 'Picture 15.jpg','Picture 0.jpg', 'Picture 1.jpg', 'Picture 10.jpg', 'Picture 11.jpg', 'Picture 12.jpg', 'Picture 16.jpg', 'Picture 17.jpg', 'Picture 18.jpg', 'Picture 19.jpg', 'Picture 2.jpg', 'Picture 20.jpg', 'Picture 21.jpg', 'Picture 22.jpg', 'Picture 23.jpg', 'Picture 24.jpg', 'Picture 25.jpg', 'Picture 26.jpg', 'Picture 27.jpg', 'Picture 28.jpg', 'Picture 29.jpg', 'Picture 3.jpg', 'Picture 30.jpg', 'Picture 31.jpg', 'Picture 32.jpg', 'Picture 33.jpg', 'Picture 34.jpg', 'Picture 35.jpg', 'Picture 36.jpg', 'Picture 37.jpg'] >>> print(natsort.natsorted(ll,reverse=True)) ['Picture 37.jpg', 'Picture 36.jpg', 'Picture 35.jpg', 'Picture 34.jpg', 'Picture 33.jpg', 'Picture 32.jpg', 'Picture 31.jpg', 'Picture 30.jpg', 'Picture 29.jpg', 'Picture 28.jpg', 'Picture 27.jpg', 'Picture 26.jpg', 'Picture 25.jpg', 'Picture 24.jpg', 'Picture 23.jpg', 'Picture 22.jpg', 'Picture 21.jpg', 'Picture 20.jpg', 'Picture 19.jpg', 'Picture 18.jpg', 'Picture 17.jpg', 'Picture 16.jpg', 'Picture 15.jpg', 'Picture 14.jpg', 'Picture 13.jpg', 'Picture 12.jpg', 'Picture 11.jpg', 'Picture 10.jpg', 'Picture 3.jpg', 'Picture 2.jpg', 'Picture 1.jpg', 'Picture 0.jpg']
-
==============================
3.[...]
[...]
splitext를 사용하여 확장자가없는 부분을 가져 와서 정렬 용 int로 변환 할 수 있습니다. 목록의 이름이 'l'이고 정렬 된 목록의 이름이 'lsorted'인 경우 다음을 사용할 수 있습니다.
lsorted = sorted(l,key=lambda x: int(os.path.splitext(x)[0]))
'10 .jpg '의 os.path.splitext는 ['10', '.jpg]]를 반환하므로 요소 0의 int ()를 사용하면 확장자가없는 파일 이름이 포함 할 수있는 문자열 만 포함 할 수 있습니다. int ()를 사용하여 정수로 변환 할 수 있습니다. 그렇지 않으면 오류가 발생합니다.
from https://stackoverflow.com/questions/33159106/sort-filenames-in-directory-in-ascending-order by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 부스트 파이썬 안녕 프로그램에서 가져 오기 오류 (0) | 2018.11.24 |
---|---|
[PYTHON] 인코딩은 "ascii"코덱이 문자를 인코딩 할 수 없음을 나타냅니다. 서수는 범위에 없습니다 (128) " (0) | 2018.11.24 |
[PYTHON] QWidget 배경색을 설정하는 방법? (0) | 2018.11.24 |
[PYTHON] int 객체는 반복 가능하지 않습니까? (0) | 2018.11.24 |
[PYTHON] 파이썬 : 빌트인리스트 타입으로부터 어떻게 상속받을 수 있습니까? (0) | 2018.11.24 |