按表示日期的字符串的一部分对 Python 列表进行排序

问题描述

考虑这个列表:

original_list = ['C:\\\\folder\\Apr2017_VH.img','C:\\\\folder\\Jan2019_VH.img','C:\\\\folder\\Nov2017_VH.img','C:\\\\folder\\Apr2018_VH.img','C:\\\\folder\\Mar2017_VH.img','C:\\\\folder\\May2019_VH.img','C:\\\\folder\\Aug2019_VH.img','C:\\\\folder\\Jan2020_VH.img','C:\\\\folder\\Oct2018_VH.img']

我需要按日期排序:

sorted_list = ['C:\\\\folder\\Mar2017_VH.img','C:\\\\folder\\Apr2017_VH.img','C:\\\\folder\\Oct2018_VH.img','C:\\\\folder\\Jan2020_VH.img']

我尝试拆分字符串,但我只能按年份和月份按字母顺序排序。

解决方法

在关闭之前快速提供帮助:

import datetime

def date_from_name(name):
    return datetime.datetime.strptime(
        name,'C:\\\\folder\\%b%Y_VH.img'
    )

original_list = [
    'C:\\\\folder\\Apr2017_VH.img','C:\\\\folder\\Jan2019_VH.img','C:\\\\folder\\Nov2017_VH.img','C:\\\\folder\\Apr2018_VH.img','C:\\\\folder\\Mar2017_VH.img','C:\\\\folder\\May2019_VH.img','C:\\\\folder\\Aug2019_VH.img','C:\\\\folder\\Jan2020_VH.img','C:\\\\folder\\Oct2018_VH.img'
]

sorted_list = sorted(original_list,key=date_from_name)
print(sorted_list)

解析日期的特殊字符是documented here

,

您可以使用 parse 模块中的 dateutil.parser 功能,该功能也能够解析不同格式的日期。

from dateutil.parser import parse
or_list = ['C:\\\\folder\\Apr2017_VH.img','C:\\\\folder\\Oct2018_VH.img']

def createdAt(item):
    date = item.split('_VH')[0]
    date = date.split('\\')[-1]
    date = parse(date)
    return date

sortedls = sorted(or_list,key=createdAt)
print(sortedls)

输出:

['C:\\\\folder\\Mar2017_VH.img','C:\\\\folder\\Apr2017_VH.img','C:\\\\folder\\Oct2018_VH.img','C:\\\\folder\\Jan2020_VH.img']