Изменить порядок файлов

In[]
all_files 
out[]
[1multibias_spar_-1.000_0.000.s2p',
1multibias_spar_-1.000_10.000.s2p',
1multibias_spar_-1.000_2.000.s2p',
1multibias_spar_-1.000_4.000.s2p',
1multibias_spar_-1.000_6.000.s2p',
1multibias_spar_-1.000_8.000.s2p',
1multibias_spar_-2.000_0.000.s2p',
1multibias_spar_-2.000_10.000.s2p',
1multibias_spar_-2.000_2.000.s2p',
1multibias_spar_-2.000_4.000.s2p',
1multibias_spar_-2.000_6.000.s2p',
1multibias_spar_-2.000_8.000.s2p',
1multibias_spar_-3.000_0.000.s2p',
1multibias_spar_-3.000_10.000.s2p',
1multibias_spar_-3.000_2.000.s2p',
1multibias_spar_-3.000_4.000.s2p',
1multibias_spar_-3.000_6.000.s2p',
1multibias_spar_-3.000_8.000.s2p',
1multibias_spar_-4.000_0.000.s2p',
1multibias_spar_-4.000_10.000.s2p',
1multibias_spar_-4.000_2.000.s2p',
1multibias_spar_-4.000_4.000.s2p',
1multibias_spar_-4.000_6.000.s2p',
1multibias_spar_-4.000_8.000.s2p',
1multibias_spar_-5.000_0.000.s2p',
1multibias_spar_-5.000_10.000.s2p',
1multibias_spar_-5.000_2.000.s2p',
1multibias_spar_-5.000_4.000.s2p',
1multibias_spar_-5.000_6.000.s2p',
1multibias_spar_-5.000_8.000.s2p',
1multibias_spar_-6.000_0.000.s2p',
1multibias_spar_-6.000_10.000.s2p',
1multibias_spar_-6.000_2.000.s2p',
1multibias_spar_-6.000_4.000.s2p',
1multibias_spar_-6.000_6.000.s2p',
1multibias_spar_-6.000_8.000.s2p',
1multibias_spar_-7.000_0.000.s2p',
1multibias_spar_-7.000_10.000.s2p',
1multibias_spar_-7.000_2.000.s2p',
1multibias_spar_-7.000_4.000.s2p',
1multibias_spar_-7.000_6.000.s2p',
1multibias_spar_-7.000_8.000.s2p',
1multibias_spar_0.000_0.000.s2p',
1multibias_spar_0.000_10.000.s2p',
1multibias_spar_0.000_2.000.s2p',
1multibias_spar_0.000_4.000.s2p',
1multibias_spar_0.000_6.000.s2p',
1multibias_spar_0.000_8.000.s2p']

Как отсортировать список имен файлов чтобы оно начиналось с файла 0.000_0.000 до -7.000_10.000 Желаймый результат:

['1multibias_spar_0.000_0.000.s2p',
 '1multibias_spar_0.000_2.000.s2p',
'1multibias_spar_0.000_4.000.s2p',
'1multibias_spar_0.000_6.000.s2p',
'1multibias_spar_0.000_8.000.s2p',
'1multibias_spar_0.000_10.000.s2p',
'1multibias_spar_-1.000_0.000.s2p',
'1multibias_spar_-1.000_2.000.s2p',
'1multibias_spar_-1.000_4.000.s2p',
'1multibias_spar_-1.000_6.000.s2p',
'1multibias_spar_-1.000_8.000.s2p',
'1multibias_spar_-1.000_10.000.s2p',
'1multibias_spar_-2.000_0.000.s2p',
'1multibias_spar_-2.000_2.000.s2p',
'1multibias_spar_-2.000_4.000.s2p',
'1multibias_spar_-2.000_6.000.s2p',
'1multibias_spar_-2.000_8.000.s2p', 
'1multibias_spar_-2.000_10.000.s2p', 
'1multibias_spar_-3.000_0.000.s2p',
'1multibias_spar_-3.000_2.000.s2p',
'1multibias_spar_-3.000_4.000.s2p',
'1multibias_spar_-3.000_6.000.s2p', 
'1multibias_spar_-3.000_8.000.s2p', 
'1multibias_spar_-3.000_10.000.s2p',
'1multibias_spar_-4.000_0.000.s2p',
'1multibias_spar_-4.000_2.000.s2p',
'1multibias_spar_-4.000_4.000.s2p',
'1multibias_spar_-4.000_6.000.s2p',
'1multibias_spar_-4.000_8.000.s2p',
'1multibias_spar_-4.000_10.000.s2p',
'1multibias_spar_-5.000_0.000.s2p',
'1multibias_spar_-5.000_2.000.s2p',
'1multibias_spar_-5.000_4.000.s2p',
'1multibias_spar_-5.000_6.000.s2p',
'1multibias_spar_-5.000_8.000.s2p', 
'1multibias_spar_-5.000_10.000.s2p', 
'1multibias_spar_-6.000_0.000.s2p', 
'1multibias_spar_-6.000_2.000.s2p', 
'1multibias_spar_-6.000_4.000.s2p', 
'1multibias_spar_-6.000_6.000.s2p',
'1multibias_spar_-6.000_8.000.s2p',
'1multibias_spar_-6.000_10.000.s2p',
'1multibias_spar_-7.000_0.000.s2p', 
'1multibias_spar_-7.000_2.000.s2p', 
'1multibias_spar_-7.000_4.000.s2p', 
'1multibias_spar_-7.000_6.000.s2p', 
'1multibias_spar_-7.000_8.000.s2p', 
'1multibias_spar_-7.000_10.000.s2p']

Ответы (2 шт):

Автор решения: gil9red

Вызываем сортировку с ключом сортировки. Ключом будут 2 числа, полученных из названии файла:

def get_key(file_name: str) -> (int, int):
    m = re.search(r'_-?([.\d]+)_-?([.\d]+)\.s2p', file_name)
    num1 = m.group(1).replace('.', '')
    num2 = m.group(2).replace('.', '')
    return int(num1), int(num2)

Пример:

import re


def get_key(file_name: str) -> (int, int):
    m = re.search(r'_-?([.\d]+)_-?([.\d]+)\.s2p', file_name)
    num1 = m.group(1).replace('.', '')
    num2 = m.group(2).replace('.', '')
    return int(num1), int(num2)


items = ['1multibias_spar_-1.000_0.000.s2p',
'1multibias_spar_-1.000_10.000.s2p',
'1multibias_spar_-1.000_2.000.s2p',
'1multibias_spar_-1.000_4.000.s2p',
'1multibias_spar_-1.000_6.000.s2p',
'1multibias_spar_-1.000_8.000.s2p',
'1multibias_spar_-2.000_0.000.s2p',
'1multibias_spar_-2.000_10.000.s2p',
'1multibias_spar_-2.000_2.000.s2p',
'1multibias_spar_-2.000_4.000.s2p',
'1multibias_spar_-2.000_6.000.s2p',
'1multibias_spar_-2.000_8.000.s2p',
'1multibias_spar_-3.000_0.000.s2p',
'1multibias_spar_-3.000_10.000.s2p',
'1multibias_spar_-3.000_2.000.s2p',
'1multibias_spar_-3.000_4.000.s2p',
'1multibias_spar_-3.000_6.000.s2p',
'1multibias_spar_-3.000_8.000.s2p',
'1multibias_spar_-4.000_0.000.s2p',
'1multibias_spar_-4.000_10.000.s2p',
'1multibias_spar_-4.000_2.000.s2p',
'1multibias_spar_-4.000_4.000.s2p',
'1multibias_spar_-4.000_6.000.s2p',
'1multibias_spar_-4.000_8.000.s2p',
'1multibias_spar_-5.000_0.000.s2p',
'1multibias_spar_-5.000_10.000.s2p',
'1multibias_spar_-5.000_2.000.s2p',
'1multibias_spar_-5.000_4.000.s2p',
'1multibias_spar_-5.000_6.000.s2p',
'1multibias_spar_-5.000_8.000.s2p',
'1multibias_spar_-6.000_0.000.s2p',
'1multibias_spar_-6.000_10.000.s2p',
'1multibias_spar_-6.000_2.000.s2p',
'1multibias_spar_-6.000_4.000.s2p',
'1multibias_spar_-6.000_6.000.s2p',
'1multibias_spar_-6.000_8.000.s2p',
'1multibias_spar_-7.000_0.000.s2p',
'1multibias_spar_-7.000_10.000.s2p',
'1multibias_spar_-7.000_2.000.s2p',
'1multibias_spar_-7.000_4.000.s2p',
'1multibias_spar_-7.000_6.000.s2p',
'1multibias_spar_-7.000_8.000.s2p',
'1multibias_spar_0.000_0.000.s2p',
'1multibias_spar_0.000_10.000.s2p',
'1multibias_spar_0.000_2.000.s2p',
'1multibias_spar_0.000_4.000.s2p',
'1multibias_spar_0.000_6.000.s2p',
'1multibias_spar_0.000_8.000.s2p']

needs = ['1multibias_spar_0.000_0.000.s2p',
 '1multibias_spar_0.000_2.000.s2p',
'1multibias_spar_0.000_4.000.s2p',
'1multibias_spar_0.000_6.000.s2p',
'1multibias_spar_0.000_8.000.s2p',
'1multibias_spar_0.000_10.000.s2p',
'1multibias_spar_-1.000_0.000.s2p',
'1multibias_spar_-1.000_2.000.s2p',
'1multibias_spar_-1.000_4.000.s2p',
'1multibias_spar_-1.000_6.000.s2p',
'1multibias_spar_-1.000_8.000.s2p',
'1multibias_spar_-1.000_10.000.s2p',
'1multibias_spar_-2.000_0.000.s2p',
'1multibias_spar_-2.000_2.000.s2p',
'1multibias_spar_-2.000_4.000.s2p',
'1multibias_spar_-2.000_6.000.s2p',
'1multibias_spar_-2.000_8.000.s2p',
'1multibias_spar_-2.000_10.000.s2p',
'1multibias_spar_-3.000_0.000.s2p',
'1multibias_spar_-3.000_2.000.s2p',
'1multibias_spar_-3.000_4.000.s2p',
'1multibias_spar_-3.000_6.000.s2p',
'1multibias_spar_-3.000_8.000.s2p',
'1multibias_spar_-3.000_10.000.s2p',
'1multibias_spar_-4.000_0.000.s2p',
'1multibias_spar_-4.000_2.000.s2p',
'1multibias_spar_-4.000_4.000.s2p',
'1multibias_spar_-4.000_6.000.s2p',
'1multibias_spar_-4.000_8.000.s2p',
'1multibias_spar_-4.000_10.000.s2p',
'1multibias_spar_-5.000_0.000.s2p',
'1multibias_spar_-5.000_2.000.s2p',
'1multibias_spar_-5.000_4.000.s2p',
'1multibias_spar_-5.000_6.000.s2p',
'1multibias_spar_-5.000_8.000.s2p',
'1multibias_spar_-5.000_10.000.s2p',
'1multibias_spar_-6.000_0.000.s2p',
'1multibias_spar_-6.000_2.000.s2p',
'1multibias_spar_-6.000_4.000.s2p',
'1multibias_spar_-6.000_6.000.s2p',
'1multibias_spar_-6.000_8.000.s2p',
'1multibias_spar_-6.000_10.000.s2p',
'1multibias_spar_-7.000_0.000.s2p',
'1multibias_spar_-7.000_2.000.s2p',
'1multibias_spar_-7.000_4.000.s2p',
'1multibias_spar_-7.000_6.000.s2p',
'1multibias_spar_-7.000_8.000.s2p',
'1multibias_spar_-7.000_10.000.s2p']


items.sort(key=get_key)
print(items)
print(needs)
print(items == needs)

Результат:

['1multibias_spar_0.000_0.000.s2p', '1multibias_spar_0.000_2.000.s2p', '1multibias_spar_0.000_4.000.s2p', '1multibias_spar_0.000_6.000.s2p', '1multibias_spar_0.000_8.000.s2p', '1multibias_spar_0.000_10.000.s2p', '1multibias_spar_-1.000_0.000.s2p', '1multibias_spar_-1.000_2.000.s2p', '1multibias_spar_-1.000_4.000.s2p', '1multibias_spar_-1.000_6.000.s2p', '1multibias_spar_-1.000_8.000.s2p', '1multibias_spar_-1.000_10.000.s2p', '1multibias_spar_-2.000_0.000.s2p', '1multibias_spar_-2.000_2.000.s2p', '1multibias_spar_-2.000_4.000.s2p', '1multibias_spar_-2.000_6.000.s2p', '1multibias_spar_-2.000_8.000.s2p', '1multibias_spar_-2.000_10.000.s2p', '1multibias_spar_-3.000_0.000.s2p', '1multibias_spar_-3.000_2.000.s2p', '1multibias_spar_-3.000_4.000.s2p', '1multibias_spar_-3.000_6.000.s2p', '1multibias_spar_-3.000_8.000.s2p', '1multibias_spar_-3.000_10.000.s2p', '1multibias_spar_-4.000_0.000.s2p', '1multibias_spar_-4.000_2.000.s2p', '1multibias_spar_-4.000_4.000.s2p', '1multibias_spar_-4.000_6.000.s2p', '1multibias_spar_-4.000_8.000.s2p', '1multibias_spar_-4.000_10.000.s2p', '1multibias_spar_-5.000_0.000.s2p', '1multibias_spar_-5.000_2.000.s2p', '1multibias_spar_-5.000_4.000.s2p', '1multibias_spar_-5.000_6.000.s2p', '1multibias_spar_-5.000_8.000.s2p', '1multibias_spar_-5.000_10.000.s2p', '1multibias_spar_-6.000_0.000.s2p', '1multibias_spar_-6.000_2.000.s2p', '1multibias_spar_-6.000_4.000.s2p', '1multibias_spar_-6.000_6.000.s2p', '1multibias_spar_-6.000_8.000.s2p', '1multibias_spar_-6.000_10.000.s2p', '1multibias_spar_-7.000_0.000.s2p', '1multibias_spar_-7.000_2.000.s2p', '1multibias_spar_-7.000_4.000.s2p', '1multibias_spar_-7.000_6.000.s2p', '1multibias_spar_-7.000_8.000.s2p', '1multibias_spar_-7.000_10.000.s2p']
['1multibias_spar_0.000_0.000.s2p', '1multibias_spar_0.000_2.000.s2p', '1multibias_spar_0.000_4.000.s2p', '1multibias_spar_0.000_6.000.s2p', '1multibias_spar_0.000_8.000.s2p', '1multibias_spar_0.000_10.000.s2p', '1multibias_spar_-1.000_0.000.s2p', '1multibias_spar_-1.000_2.000.s2p', '1multibias_spar_-1.000_4.000.s2p', '1multibias_spar_-1.000_6.000.s2p', '1multibias_spar_-1.000_8.000.s2p', '1multibias_spar_-1.000_10.000.s2p', '1multibias_spar_-2.000_0.000.s2p', '1multibias_spar_-2.000_2.000.s2p', '1multibias_spar_-2.000_4.000.s2p', '1multibias_spar_-2.000_6.000.s2p', '1multibias_spar_-2.000_8.000.s2p', '1multibias_spar_-2.000_10.000.s2p', '1multibias_spar_-3.000_0.000.s2p', '1multibias_spar_-3.000_2.000.s2p', '1multibias_spar_-3.000_4.000.s2p', '1multibias_spar_-3.000_6.000.s2p', '1multibias_spar_-3.000_8.000.s2p', '1multibias_spar_-3.000_10.000.s2p', '1multibias_spar_-4.000_0.000.s2p', '1multibias_spar_-4.000_2.000.s2p', '1multibias_spar_-4.000_4.000.s2p', '1multibias_spar_-4.000_6.000.s2p', '1multibias_spar_-4.000_8.000.s2p', '1multibias_spar_-4.000_10.000.s2p', '1multibias_spar_-5.000_0.000.s2p', '1multibias_spar_-5.000_2.000.s2p', '1multibias_spar_-5.000_4.000.s2p', '1multibias_spar_-5.000_6.000.s2p', '1multibias_spar_-5.000_8.000.s2p', '1multibias_spar_-5.000_10.000.s2p', '1multibias_spar_-6.000_0.000.s2p', '1multibias_spar_-6.000_2.000.s2p', '1multibias_spar_-6.000_4.000.s2p', '1multibias_spar_-6.000_6.000.s2p', '1multibias_spar_-6.000_8.000.s2p', '1multibias_spar_-6.000_10.000.s2p', '1multibias_spar_-7.000_0.000.s2p', '1multibias_spar_-7.000_2.000.s2p', '1multibias_spar_-7.000_4.000.s2p', '1multibias_spar_-7.000_6.000.s2p', '1multibias_spar_-7.000_8.000.s2p', '1multibias_spar_-7.000_10.000.s2p']
True
→ Ссылка
Автор решения: SergFSM

Такой ключ вроде дает тот же результат:

from re import search

files = sorted(items, key=lambda x: tuple(map(int, search(r'_-?(\d+).+_(\d+)', x).groups())))
→ Ссылка