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

时间:2013-07-29 08:29:15

标签: python sorting datetime

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

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_135218 [YYYYMMDD_HHMMSS]
  3. 按日期时间戳排序文件名列表。
  4. 这样做的任何捷径pythonic方式都会有所帮助..

    我是初学者..

2 个答案:

答案 0 :(得分:3)

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

我使用正则表达式来提取时间戳(您将在m.groups()[0]中找到提取的时间戳),然后在给定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

答案 1 :(得分:0)

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