在python中按子串排序目录

时间:2017-08-08 13:53:34

标签: python

假设:我有目录名:dir1 DIR1 /

A_Y2016W25
A_Y2017W15
B_Y2017W30
A_Y2016W20
B_Y2017W35
A_Y2017W30

我想通过YXXXX和WXX对其进行排序并按顺序打印:

A_Y2016W20
A_Y2016W25
A_Y2017W15
A_Y2017W30

B_Y2017W30
B_Y2017W35

如何使用sort?

3 个答案:

答案 0 :(得分:3)

Keyboard3

将完成这项工作。

事实上,您不需要执行任何类型的子字符串,因为您在要进行的排序中已经有了从左到右的优先级。

答案 1 :(得分:0)

你可以通过 -

来做到
a = ['A_Y2016W25', 'A_Y2017W15', 'B_Y2017W30', 'A_Y2016W20', 'B_Y2017W35', 'A_Y2017W30']

def ext(strng):
    return ord(strng[0]), int(strng[3:7]), int(strng[8:])

a.sort(key = ext) #['A_Y2016W20', 'A_Y2016W25', 'A_Y2017W15', 'A_Y2017W30', 'B_Y2017W30', 'B_Y2017W35']

答案 2 :(得分:0)

使用基于正则表达式键函数的sort()的另一种方法,如下例所示:

import re 

def sort_regex(regex, a):
    data = re.search(regex, a)
    return data.group(0) if data else ''

a = ['A_Y2016W25', 'A_Y2017W15', 'B_Y2017W30', 'A_Y2016W20', 'B_Y2017W35', 'A_Y2017W30']

a.sort(key=lambda x: sort_regex(r'Y\d{4}', x))
print(a)

a.sort(key=lambda x: sort_regex(r'W\d{2}', x))
print(a)

a.sort(key=lambda x: sort_regex(r'Y\d{4}W\d{2}', x))
print(a)

输出:

['A_Y2016W25', 'A_Y2016W20', 'A_Y2017W15', 'B_Y2017W30', 'B_Y2017W35', 'A_Y2017W30']
['A_Y2017W15', 'A_Y2016W20', 'A_Y2016W25', 'B_Y2017W30', 'A_Y2017W30', 'B_Y2017W35']
['A_Y2016W20', 'A_Y2016W25', 'A_Y2017W15', 'B_Y2017W30', 'A_Y2017W30', 'B_Y2017W35']