Как заказать пути к файлам в лексикографическом порядке?питон - PullRequest
0 голосов
/ 08 октября 2018

Мне нужно отсортировать список путей к файлам в лексикографическом порядке, например, выходные данные сортируются следующим образом:

C:\Test\Project1\Example\test1.txt   
C:\Test\Project1\Example\test2.txt   
C:\Test\Project1\Example\Sub\meee.txt       
C:\Test\Project1\Example\Sub\test1.txt    
C:\Test\Project1\Example\Sub\youu.txt   
C:\Test\Project1\Example\Zzz\zzz.py

При естественной сортировке я получаю C:\Test\Project1\Example\Sub\meee.txt до C:\Test\Project1\Example\test1.txt и нехочу это.

1 Ответ

0 голосов
/ 08 октября 2018

Вы можете использовать sorted с пользовательским ключом, который отдает приоритет файлам в корневом каталоге:

L = [r'C:\Test\Project1\Example\test1.txt', r'C:\Test\Project1\Example\test2.txt',
     r'C:\Test\Project1\Example\Sub\meee.txt', r'C:\Test\Project1\Example\Sub\test1.txt',   
     r'C:\Test\Project1\Example\Sub\youu.txt', r'C:\Test\Project1\Example\Zzz\zzz.py']

def sort_key(x):
    splits = x.split('\\')[4:]
    return len(splits), splits

res = sorted(L, key=sort_key)

['C:\\Test\\Project1\\Example\\test1.txt',
 'C:\\Test\\Project1\\Example\\test2.txt',
 'C:\\Test\\Project1\\Example\\Sub\\meee.txt',
 'C:\\Test\\Project1\\Example\\Sub\\test1.txt',
 'C:\\Test\\Project1\\Example\\Sub\\youu.txt',
 'C:\\Test\\Project1\\Example\\Zzz\\zzz.py']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...