Python 2.7 Python-基于时间戳对文件进行排序
我有一个包含文件名列表的列表,我想根据时间戳进行排序,时间戳(即时间戳)在每个文件名中都是内置的 注意:在文件中,Hello_Hi_2015-02-20T084521_1424543480.tar.gz-->2015-02-20T084521表示为“年-月-日HMMSS”(基于此我想排序) 输入文件如下:Python 2.7 Python-基于时间戳对文件进行排序,python-2.7,Python 2.7,我有一个包含文件名列表的列表,我想根据时间戳进行排序,时间戳(即时间戳)在每个文件名中都是内置的 注意:在文件中,Hello_Hi_2015-02-20T084521_1424543480.tar.gz-->2015-02-20T084521表示为“年-月-日HMMSS”(基于此我想排序) 输入文件如下: file_list = ['Hello_Hi_2015-02-20T084521_1424543480.tar.gz', 'Hello_Hi_2015-02-20T095845_14245
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
提前谢谢 您的代码试图根据文件系统存储的修改时间而不是文件名时间进行排序 由于您的文件名编码稍显正常:-),如果您想仅根据文件名进行排序,可以使用:
sorted(os.listdir(dir), key=lambda s: s[9:]))
这样就可以了,但这只是因为文件名中的时间戳编码是合理的:固定长度前缀、零填充、恒定宽度的数字,从最大时间参考(年)到最低时间参考(秒)的顺序
如果您的前缀不固定,您可以尝试使用以下类似的RegExp(将按第二个下划线后的值排序):
这样行吗
您可以将列表内容逐行写入文件并读取文件:
lines = sorted(open(open_file).readlines(), key = lambda line :
line.split("_")[2])
此外,您还可以打印出行。这对我来说很有效,它按创建的时间对名称中没有时间戳的文件进行排序
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)
您声明您正在尝试按文件名排序,但您的函数使用的是getmtime,这是文件本身上次修改的时间。您需要决定一种方法,或者是文件时间戳,或者是文件名中编码的信息,并始终如一地进行排序。@sparky:我想根据文件名中编码的时间戳进行排序。如果您只检查扩展名,为什么要降低它?另外,它现在按文件的时间戳排序,而不是按文件名排序,什么是不同的。不太可能,但仍然如此。这假定您位于目标文件夹中。如果没有,
os.listdir(“.”
可以很容易地更新,但我不知道如何修复key=os.path.getmtime
(这也要求文件位于当前目录中)。检查文件名:它们分别命名为Hello\u Hi和Hello\u WR,排序时,它将基于这一点而不是另一部分进行排序。你说得对!我没有注意到这一点,这意味着命名约定是不合理的。我会搞定的,酷!我自己偶然发现了这个问题,发现这个解决方案在旧场景中不起作用:)
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)