Python排序从文件名获取日期时间并排序lis

2024-09-29 20:28:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

目标:

  1. 获取文件列表。在
  2. 从文件名中获取日期时间戳,例如20111012 U 135218[YYYYMMDD_HHMMSS]
  3. 按日期时间戳对文件名列表进行排序。在

任何一种Python式的捷径都会很有帮助。。在

我是初学者。。在


Tags: txt列表文件名时间qwcd5f6zhyo80ga608f9ycjwym1s1kmf1rg6cvsrtfg8rcspjtmtlistoffiles20111012gwrlmxrfcphdsjbxe2tneq7h0tc7ijsnhvlxulcqiderlcpzw
2条回答

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

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

要理解timeformat字符串的格式,请参阅strptime文档。在

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

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

相关问题 更多 >

    热门问题