본문 바로가기
  • Hello_
Python/List

[python] natsorted - 문자열 리스트를 숫자를 기준으로 정렬

by LDwDL 2022. 8. 30.
728x90
반응형

오늘은 문자열 내에 있는 숫자를 기준으로 정렬하도록 하는 natsort 라이브러리에 대해 포스팅하겠다.

 

Simple yet flexible natural sorting in Python.

Natsort

Natsort 라이브러리 내에 natsorted() 함수를 사용하여 sorting 하겠다.

 

[파일 경로 예시]

LIDC라는 상위 폴더에 LIDC-IDRI-'idx' 형태의 폴더들로 구성되어 있다.

파일 형태

 

[파일 경로 읽기]

os.listdir()을 통해 해당 경로에 있는 폴더를 획득하여 출력해본 결과 다음과 같이 출력된다.

import os

dir = "./LIDC"
print(os.listdir(dir))

"""
['LIDC-IDRI-1',
 'LIDC-IDRI-10',
 'LIDC-IDRI-2',
 'LIDC-IDRI-20',
 'LIDC-IDRI-3',
 'LIDC-IDRI-4',
 'LIDC-IDRI-5',
 'LIDC-IDRI-6',
 'LIDC-IDRI-7',
 'LIDC-IDRI-8',
 'LIDC-IDRI-9']
"""

폴더명은 문자열 형태이기 때문에 '1' 이후에 '10', '2' 이후에 '20'이 나오도록 자동으로 정렬한다.

하지만 우리는 일반적으로 '9' 이후에 '10'이고, '10' 이후에 '20'이 나오는 것이 합리적으로 판단된다.

이를 위해 natsorted 함수를 사용하여 정렬한다면 해결이 가능하다.

 

[Natsort의 natsorted 함수]

from natsort import natsorted

print(natsorted(os.listdir(dir)))

# ['LIDC-IDRI-1', 'LIDC-IDRI-2', 'LIDC-IDRI-3', 'LIDC-IDRI-4', 'LIDC-IDRI-5', 'LIDC-IDRI-6', 'LIDC-IDRI-7', 'LIDC-IDRI-8', 'LIDC-IDRI-9', 'LIDC-IDRI-10', 'LIDC-IDRI-20']

다음과 같이 natsorted 함수를 사용한다면, 문자열 내에 있는 숫자를 기준으로 순서대로 정렬이 가능하다.

 

 

728x90
반응형

댓글