2015-10-10 2 views
0
from natsort import natsorted 

filelist=[] 
filelist=os.listdir("C:\\Users\\Amit\\Downloads\\Compressed\\trainigVid") 
natsorted(filelist) 
print filelist 

Я получаю следующий выводПочему вызов natsorted не изменяет мой список?

['1.avi', '10.avi', '11.avi', '12.avi', '13.avi', '14.avi', '15.avi', '16.avi', '17.avi', '18.avi', '19.avi', '2.avi', '20.avi', '21.avi', '22.avi', '23.avi', '24.avi', '3.avi', '4.avi', '5.avi', '6.avi', '7.avi', '8.avi', '9.avi'] 

Я хочу этот список, чтобы быть естественно отсортированы как

[1.avi, 2.avi, 3.avi.....] 

Я застрял, пожалуйста, помогите

ответ

3

natsorted возвращает вновь отсортированный список, он не изменяет исходный список на месте. Это означает, что вы должны использовать:

filelist = natsorted(filelist) 

, чтобы получить это возвращаемое значение.

+1

Если вы действительно хотите, чтобы разобраться на месте, используйте 'от natsort импорта natsort_key; filelist.sort (ключ = natsort_key) '. – SethMMorton

+0

@voussoir спасибо, это сработало! –

+0

@SethMMorton Все, что я хотел, это сортировать список, но я обязательно попробую ваше решение! Спасибо! –

1

Попробуйте это:

import os 

filelist = os.listdir("C:\\Users\\Amit\\Downloads\\Compressed\\trainigVid") 
out = [] 

for s in sorted(filelist, key=lambda x:int(os.path.splitext(x)[0])): 
    out.append(s) 

print out 

Демо:

['1.avi', '2.avi', '3.avi', '4.avi', '5.avi', '6.avi', '7.avi', '8.avi', '9.avi', '10.avi', '11.avi', '12.avi', '13.avi', '14.avi', '15.avi', '16.avi', '17.avi', '18.avi', '19.avi', '20.avi', '21.avi', '22.avi', '23.avi', '24.avi'] 
+0

Спасибо, но Vouissour дал более простое решение! –

+0

Хорошо, это просто мое решение без использования 'natsorted' :) –

Смежные вопросы