Форум сайта python.su
Помогите поправить скрипт для переименования файлов.
Есть папка с файлами 1.txt, 2.txt, 3.txt, 4.txt и так далее
Задача переименовать файлы в обратном порядке при помощи скрипта. Делаю задачу для изучения питона, на ней и застрял
Вот код, только учусь, так что сильно не пинайте
import os f = os.listdir('path_to_folder') i = 4 for item in os.listdir('path_to_folder'): dst = str(i) + '.txt' src = 'path_to_folder' + item dst = 'path_to_folder' + dst os.rename(src, dst) i = i - 1 print('done')
Офлайн
vitrolovА где у вас сортировка которая “не работает”. Хотите сортировать имена - сортируйте.
Почему то не работает сортировка
vitrolovЕсли вы знаете имена то зачем вам вообще listdir? Синтезируйте все имена.
dst = str(i) + ‘.txt’
vitrolovТак оно работать не будет. Попробуйте ручками так переименовывать :). Не получится дать файлу новое имя если файл с таким именем уже существует.
os.rename(src, dst)
Офлайн
vitrolovЧтобы отсортировать имена файлов, тебе нужно сделать функцию сравнения и её подавать в функцию сортировки в виде ключа. С именами файлов лучше сделать отдельную функцию, а не использовать лямбду. Внутри функции сравнения тебе нужно задавать критерий сортировки имён. В данном случае хватит отцепления имени и приведения его к int и его возврату из функции, но в реальных программах там может и текст какой-то в именах оказаться, и скобочки круглые. Так что отдельная функция в качестве ключа пригодится. При возникновении каких-то нюансов отдельную функцию сравнения можно будет доработать. А с лямбдой тебе придётся выковыривать лямбду и выносить её в функцию сравнения и делать так, как изначально и надо было сделать.
Почему то не работает сортировка, в переменную f файлы попадают в таком порядке
4.txt, 1.txt, 2.txt, 3.txt.
Отредактировано py.user.next (Дек. 6, 2019 01:38:20)
Офлайн
Парни, большое спасибо за ответы. Понял в чем мой косяк, не правильное понимание документации. И как следствие ошибка в логике роботы скрипта.
Офлайн