python sort() key를 이용하여 폴더 정렬하기

파이썬에 내장되있는 sort()함수는 간단하면서도 강력한 정렬기능을 제공해준다. 그러나 아래와같은 csv를 읽을때 예상하지 못한 결과를 우리는 만날 수 있다.

위 csv를 python에서 읽어보자

>>> import os,glob
>>> _list=glob.glob("*.csv")
>>> for i in _list[:10]:
...     print(i)
... 
715848.csv
293825.csv
15063709.csv
16579533.csv
124287.csv
12520894.csv
3735632.csv
10983256.csv
19486338.csv
14931607.csv

python의 glob모듈을 이용하여 확장자가 csv인 파일을 _list에 넣고 10개를 출력시켰다. 이제 _list를 정렬시키고 10개를 출력시켜보자

>>> _list.sort()
>>> for i in _list[:10]:
...     print(i)
... 
10005351.csv
10016324.csv
10027715.csv
10039113.csv
10050309.csv
10061635.csv
1006517.csv
1007052.csv
10072781.csv
1007765.csv

위 결과를 보면 순서가 우리가 생각하는 것과 다르다는 것을 알 수 있다. 그 이유는 우리는 파일을 이름을 기준으로 오름차순으로 정렬하기를 윈했지만 파이썬은 파일을 이름을 문자열으로 취급하여 strcmp를 이용하여 정렬하였기 때문에 100000.csv 가 100.csv보다 작아지게된다.(0보다 .이 작으므로) 그렇기 때문에 우리가 직접 정렬의 key를 지정해줘야한다. 문자열 에서 .csv앞에 있는걸 기준으로 정렬을 하라고 말이다.

>>> _list.sort(key=lambda x:int(x.split('.')[0]))
>>> for i in _list[:10]:
...     print(i)
... 
11120.csv
11224.csv
11321.csv
11389.csv
12014.csv
12021.csv
22409.csv
22698.csv
22784.csv
22838.csv

위 처럼 split을 이용하여 lambda함수를 만든다음 key로 주면 우리가 원하는 결과를 얻을 수 있다.

댓글을 남겨주세요~