Python排序从文件名和排序列表获取日期时间

Python排序从文件名和排序列表获取日期时间,python,sorting,datetime,Python,Sorting,Datetime,我有一个文件名列表,如下所示- ListOfFiles20111012_123717_GwUcRlmXrfCPhDSJBXE2TNEQ7h0TC7iJSnHvLxUlCQIdERLcpzw.txt ListOfFiles20111012_123742_GwRlmXrfCPhDSJBXE2TNEQ7h0TC7iJSnHvLxUlCQIdERLcpzw.txt ListOfFiles20111012_123807_PjTmt-Cd5f6ZHYO80gA608F9YCJWyM1S1KmF1rG6Cvs

我有一个文件名列表,如下所示-

ListOfFiles20111012_123717_GwUcRlmXrfCPhDSJBXE2TNEQ7h0TC7iJSnHvLxUlCQIdERLcpzw.txt
ListOfFiles20111012_123742_GwRlmXrfCPhDSJBXE2TNEQ7h0TC7iJSnHvLxUlCQIdERLcpzw.txt
ListOfFiles20111012_123807_PjTmt-Cd5f6ZHYO80gA608F9YCJWyM1S1KmF1rG6CvsrtFg8rCs.txt
ListOfFiles20111012_123808_PjTmt-wCd5f6ZHYO80gA608F9YCJWyM1S1KmF1rG6CvsrtFg8rCs.txt
ListOfFiles20111012_125217_GwRqdolmXrfCPhDSJBXE2TNEQ7h0TC7iJSnHvLxUlCQIdERLcpzw.txt
ListOfFiles20111012_125307_PjTmt-wCd5f6ZHYO80gA608F9YCJWyM1S1KmF1rG6CvsrtFg8rCs.txt
ListOfFiles20111012_130716_GwRqdofCPhDSJBXE2TNEQ7h0TC7iJSnHvLxUlCQIdERLcpzw.txt
ListOfFiles20111012_130808_PjTmt-5f6ZHYO80gA608F9YCJWyM1S1KmF1rG6CvsrtFg8rCs.txt
ListOfFiles20111012_132218_GwRqdoJBXE2TNEQ7h0TC7iJSnHvLxUlCQIdERLcpzw.txt
ListOfFiles20111012_132308_PjTmt-Cd5f6ZHYO80gA608F9YCJWyM1S1KmF1rG6CvsrtFg8rCs.txt
ListOfFiles20111012_133904_PjTmt-QwCd5f6ZHYO80gA608F9YCJWyM1S1KmF1rG6CvsrtFg8rCs.txt
ListOfFiles20111012_135218_GwRqdorfCPhDSJBXE2TNEQ7h0TC7iJSnHvLxUlCQIdERLcpzw.txt
目标:

  • 获取文件列表
  • 从文件名获取日期戳,例如20111012_135218[YYYYMMDD_HHMMSS]
  • 按日期时间戳对文件名列表进行排序
  • 任何一种快捷的python方法都会很有帮助


    我是初学者。

    使用
    sorted
    函数,您可以在其中传递列表和用于排序的键。这里的关键是
    从字符串格式解析并转换为unix时间戳的日期。

    我建议使用
    datetime
    re
    ,因为它提供了时间戳和正则表达式的所有灵活性。如果字符串的格式突然改变,您不能简单地依赖索引,因此我建议使用更灵活的方法。然而,他们的表现不如falsetru的建议

    我使用正则表达式提取时间戳(您将在
    m.groups()[0]
    中找到提取的时间戳),然后根据
    timeformat
    的格式从中解析出一个实际的datetime对象,并将其作为键传递给内置的
    sorted
    函数

    要了解
    timeformat
    字符串的格式,请参阅文档

    import datetime
    import re
    
    timeformat = "%Y%m%d_%H%M%S" # this is how your timestamp looks like
    regex = re.compile("^ListOfFiles(\d*_\d*)")
    
    def gettimestamp(thestring):
        m = regex.search(thestring)
        return datetime.datetime.strptime(m.groups()[0], timeformat)
    
    
    list_of_filenames = [
        'ListOfFiles20111012_123717_GwUcRlmXrfCPhDSJBXE2TNEQ7h0TC7iJSnHvLxUlCQIdERLcpzw.txt',
        'ListOfFiles20111012_123742_GwRlmXrfCPhDSJBXE2TNEQ7h0TC7iJSnHvLxUlCQIdERLcpzw.txt',
        'ListOfFiles20111012_123807_PjTmt-Cd5f6ZHYO80gA608F9YCJWyM1S1KmF1rG6CvsrtFg8rCs.txt',
        'ListOfFiles20111012_123808_PjTmt-wCd5f6ZHYO80gA608F9YCJWyM1S1KmF1rG6CvsrtFg8rCs.txt',
        'ListOfFiles20111012_125217_GwRqdolmXrfCPhDSJBXE2TNEQ7h0TC7iJSnHvLxUlCQIdERLcpzw.txt',
        'ListOfFiles20111012_125307_PjTmt-wCd5f6ZHYO80gA608F9YCJWyM1S1KmF1rG6CvsrtFg8rCs.txt',
        'ListOfFiles20111012_130716_GwRqdofCPhDSJBXE2TNEQ7h0TC7iJSnHvLxUlCQIdERLcpzw.txt',
        'ListOfFiles20111012_130808_PjTmt-5f6ZHYO80gA608F9YCJWyM1S1KmF1rG6CvsrtFg8rCs.txt',
        'ListOfFiles20111012_132218_GwRqdoJBXE2TNEQ7h0TC7iJSnHvLxUlCQIdERLcpzw.txt',
        'ListOfFiles20111012_132308_PjTmt-Cd5f6ZHYO80gA608F9YCJWyM1S1KmF1rG6CvsrtFg8rCs.txt',
        'ListOfFiles20111012_133904_PjTmt-QwCd5f6ZHYO80gA608F9YCJWyM1S1KmF1rG6CvsrtFg8rCs.txt',
        'ListOfFiles20111012_135218_GwRqdorfCPhDSJBXE2TNEQ7h0TC7iJSnHvLxUlCQIdERLcpzw.txt',
    ]
    
    
    for fn in sorted(list_of_filenames, key=gettimestamp):
        print fn
    

    ListOfFiles
    前缀是否为常量(所有文件都相同)?然后对文件列表进行排序;使用的datetime格式按日期-时间顺序按字母顺序排序。如果文本的格式固定为您对问题的看法,最好的方法是按照@MartijnPieters的建议执行。请注意,我忘记了
    gettimestamp
    方法中的
    返回
    。我犯了个大错误,对不起。请使用此更新版本。