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

标签 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. 按日期时间戳对文件名列表进行排序。

任何快捷的Python方式都会有帮助..

我是初学者..

最佳答案

我建议使用datetimere,因为它为您提供了时间戳和正则表达式的所有灵 active 。如果你的字符串格式突然改变,你不能简单地依赖索引,因此我建议使用更灵活的方法。然而,它们的性能不如 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

关于Python排序从文件名和排序列表中获取日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17919289/

相关文章:

c++ - 是否可以将 std::sort 与带有额外参数的排序函数一起使用?

java - 在 Java 中,如何获得两个日期之间的秒数差异?

javascript - d3 平行坐标日期时间轴

python - 将 pandas 日期时间索引向前设置一天

python - 计算机代数软件,用于最小化一组多项式中的运算次数

python - 如何使用 flup/python 配置 lighttpd bin-path 参数

javascript - 如何将 python 脚本作为服务器与 python 和 javascript 应用程序作为客户端连接?

python - Numpy 沿新轴重复数组

linux - 如何在 bash 中对逗号分隔值进行排序?

python - 跨多个时间段计算前 10 名或前 X 名列表的有效方法