使用多个定界符按日期对字符串进行排序

时间:2019-07-01 04:37:29

标签: python

我有一个可以使用glob命令找到的文件列表。文件名的前缀由用户更改(不是固定格式),但是文件名中有日期。我想按日期排序并返回最新的日期。如果排序后有多个文件具有相同的日期,请按最后一系列数字对它们进行排序。

我看了一些关于slackoverflow的例子。这个例子有最接近的解决方案。 Sort by date and string in python。但是,我有多个_分隔符,这使得多次拆分字符串效率低下。此外,用户可能会使用多个_分隔符。考虑到它是固定格式并且不受用户输入前缀的影响,我正在寻找一种更好的解决方案来提取字符串的最后一部分。

文件名列表:

c1<- colSums(Budget_panel[,1:4])
c2<- colSums(Budget_panel[,7:51])

3 个答案:

答案 0 :(得分:1)

如果您想要的只是最新的内容,则无需对它们进行排序。为此,您需要能够提取日期,可以使用正则表达式将其用作内置key函数的max()参数。

import re

files = '''
file_v1__2019-07-01-090001.dat
file_v1__2019-07-01-090201.dat
file_v1__2019-06-01-092301.dat
file_v1__2019-06-01-091001.dat
file_v1__2019-06-02-091021.dat
'''.split()

regex = re.compile(r'\d{4}-\d{2}-\d{2}-\d{6}') # XXXX-XX-XX-XXXXXX Date pattern

print(max(files, key=lambda file:(regex.search(file).group(0))))

答案 1 :(得分:0)

您可以使用sorted函数拆分数组。 假设文件名存储在变量file_list

您可以使用

对其进行排序
sorted_file_list = sorted(file_list, key=lambda each_file: each_file.split('_')[-1])

答案 2 :(得分:0)

date = sorted(date, key=lambda x: x.split('__')[-1])