IT/Python

Python - 파일명에 속한 날짜를 기준으로 정렬

촌초니 2022. 10. 3. 21:14

가끔 파일명에 날짜가 들어있고, 이 날짜를 기준으로 정렬을 해야하는 경우가 있다.

list = [
file.abc.2022-09-05T.01-01.text.txt,
file.abc.2022-05-06T.04-08.text.txt,
file.abc.2022-09-05T.02-08.text.txt,
file.abc.2022-03-01T.01-15.text.txt,
file.abc.2022-03-01T.01-11.text.txt,
file.abc.2022-05-06T.01-08.text.txt
]

위 처럼 파일명 중간에 MM.DD.HH 형식의 날짜가 있고, 이 날짜 기준으로 파일을 정렬해야하는 경우

여러 방법이 있겠지만, 최근에 했던 방법을 기술하자면,

 

dot(.) 기준으로 나눌때 2번째 항목의 YYYY-MM-DDT 그리고 3번째 항목의 hh-mm을 가지고 시간으로 파싱하여 파일명을 시간순으로 정렬할 수 있다.

 

시간을 파싱하는 함수 작성

def parse_item(file):
    parts = file.split('.')
    date_sort = parts[2] + parts[3]
    # string을 시간으로 변환
    date_time = datetime.strptime(date_sort, "%Y-%m-%dT%H-%M")
    return {
        "filename": file,
        "date": datetime.strftime(date_time, "%Y-%m-%dT%H-%M")
    }

위 리스트의 파일명을 하나씩 함수에 담아 정렬 처리

mapping_files = [parse_item(file) for file in list]
sorted_files = sorted(mapping_files, key=lambda x: x["date"])

출력해보자

for sorted_file in sorted_files:
    print (sorted_file['filename'])

 

결과