Python - 基于时间戳排序文件

时间:2015-08-07 16:40:58

标签: python-2.7

我有一个包含文件名列表的列表,我想根据时间戳进行排序,每个文件名中都有(即时间戳)。

注意:在文件中,Hello_Hi_2015-02-20T084521_1424543480.tar.gz - > 2015-02-20T084521代表"年 - 蛾 - 天THHMMSS" (基于此我想排序)

下面的输入文件:

file_list = ['Hello_Hi_2015-02-20T084521_1424543480.tar.gz',  
'Hello_Hi_2015-02-20T095845_1424543481.tar.gz',  
'Hello_Hi_2015-02-20T095926_1424543481.tar.gz',  
'Hello_Hi_2015-02-20T100025_1424543482.tar.gz',  
'Hello_Hi_2015-02-20T111631_1424543483.tar.gz',  
'Hello_Hi_2015-02-20T111718_1424543483.tar.gz',  
'Hello_Hi_2015-02-20T112502_1424543483.tar.gz',  
'Hello_Hi_2015-02-20T112633_1424543484.tar.gz',  
'Hello_Hi_2015-02-20T113427_1424543484.tar.gz',  
'Hello_Hi_2015-02-20T113456_1424543484.tar.gz',  
'Hello_Hi_2015-02-20T113608_1424543484.tar.gz',  
'Hello_Hi_2015-02-20T113659_1424543485.tar.gz',  
'Hello_Hi_2015-02-20T113809_1424543485.tar.gz',  
'Hello_Hi_2015-02-20T113901_1424543485.tar.gz',  
'Hello_Hi_2015-02-20T113955_1424543485.tar.gz',  
'Hello_Hi_2015-03-20T114122_1424543485.tar.gz',  
'Hello_Hi_2015-02-20T114532_1424543486.tar.gz',  
'Hello_Hi_2015-02-20T120045_1424543487.tar.gz',  
'Hello_Hi_2015-02-20T120146_1424543487.tar.gz',  
'Hello_WR_2015-02-20T084709_1424543480.tar.gz',  
'Hello_WR_2015-02-20T113016_1424543486.tar.gz']  

输出应为:

file_list = ['Hello_Hi_2015-02-20T084521_1424543480.tar.gz',  
'Hello_WR_2015-02-20T084709_1424543480.tar.gz',  
'Hello_Hi_2015-02-20T095845_1424543481.tar.gz',  
'Hello_Hi_2015-02-20T095926_1424543481.tar.gz',  
'Hello_Hi_2015-02-20T100025_1424543482.tar.gz',  
'Hello_Hi_2015-02-20T111631_1424543483.tar.gz',  
'Hello_Hi_2015-02-20T111718_1424543483.tar.gz',  
'Hello_Hi_2015-02-20T112502_1424543483.tar.gz',  
'Hello_Hi_2015-02-20T112633_1424543484.tar.gz',  
'Hello_WR_2015-02-20T113016_1424543486.tar.gz',  
'Hello_Hi_2015-02-20T113427_1424543484.tar.gz',  
'Hello_Hi_2015-02-20T113456_1424543484.tar.gz',  
'Hello_Hi_2015-02-20T113608_1424543484.tar.gz',  
'Hello_Hi_2015-02-20T113659_1424543485.tar.gz',  
'Hello_Hi_2015-02-20T113809_1424543485.tar.gz',  
'Hello_Hi_2015-02-20T113901_1424543485.tar.gz',  
'Hello_Hi_2015-02-20T113955_1424543485.tar.gz',  
'Hello_Hi_2015-02-20T114532_1424543486.tar.gz',  
'Hello_Hi_2015-02-20T120045_1424543487.tar.gz',  
'Hello_Hi_2015-02-20T120146_1424543487.tar.gz',  
'Hello_Hi_2015-03-20T114122_1424543485.tar.gz']  

以下是我尝试过的代码。

def sort( dir ):
   os.chdir( dir )
   file_list = glob.glob('Hello_*')
   file_list.sort(key=os.path.getmtime)
   print("\n".join(file_list))
   return 0

提前致谢!!

3 个答案:

答案 0 :(得分:1)

所以这对我有用,它按创建时间对文件进行排序,但名称中没有时间戳;

import os
import re

files = [file for file in os.listdir(".") if (file.lower().endswith('.gz'))]
files.sort(key=os.path.getmtime)

for file in sorted(files,key=os.path.getmtime):
    print(file)

答案 1 :(得分:0)

您的代码正在尝试根据文件系统存储的修改时间进行排序,而不是文件名时间。

由于你的文件名编码有点理智:-)如果你想根据文件名进行排序,你可以使用:

sorted(os.listdir(dir), key=lambda s: s[9:]))

这样做,但只是因为文件名中的时间戳编码是合理的:固定长度前缀,零填充,恒定宽度数字,从最大时间参考(年)到最低时间(第二)的顺序

如果您的前缀未修复,您可以尝试使用RegExp这样的东西(将按第二个下划线后面的值排序):

import re
pat = re.compile('_.*?(_)')
sorted(os.listdir(dir), key=lambda s: s[pat.search(s).end():])

答案 2 :(得分:0)

这会有用吗?

您可以逐行将列表内容写入文件并读取文件:

lines = sorted(open(open_file).readlines(), key = lambda line :        
line.split("_")[2])

此外,您可以打印出行。