我确实有一个文件名列表,如下所示 -
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方式都会有帮助..
我是初学者..
最佳答案
我建议使用datetime
和re
,因为它为您提供了时间戳和正则表达式的所有灵 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/