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

2024-09-28 23:46:53 发布

您现在位置: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\\Nov2017_VH.img', 
               'C:\\\\folder\\Apr2018_VH.img',
               'C:\\\\folder\\Oct2018_VH.img', 
               'C:\\\\folder\\Jan2019_VH.img', 
               'C:\\\\folder\\May2019_VH.img',
               'C:\\\\folder\\Aug2019_VH.img', 
               'C:\\\\folder\\Jan2020_VH.img']

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


Tags: img排序folderlistoriginalvhjan2020apr2018
2条回答

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

from dateutil.parser import parse
or_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']

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\\Nov2017_VH.img', 'C:\\\\folder\\Apr2018_VH.img', 'C:\\\\folder\\Oct2018_VH.img', 'C:\\\\folder\\Jan2019_VH.img', 'C:\\\\folder\\May2019_VH.img', 'C:\\\\folder\\Aug2019_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

相关问题 更多 >