Найти - Пользователи
Полная версия: Помогите переименовать файлы
Начало » Python для новичков » Помогите переименовать файлы
1
vitrolov
Помогите поправить скрипт для переименования файлов.
Есть папка с файлами 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')

Почему то не работает сортировка, в переменную f файлы попадают в таком порядке
4.txt, 1.txt, 2.txt, 3.txt.
Объясните по возможности мой косяк и как исправить
doza_and
vitrolov
Почему то не работает сортировка
А где у вас сортировка которая “не работает”. Хотите сортировать имена - сортируйте.

listdir(path=None)
Return a list containing the names of the files in the directory.
Нигде ни слова о сортировке.

vitrolov
dst = str(i) + ‘.txt’
Если вы знаете имена то зачем вам вообще listdir? Синтезируйте все имена.
vitrolov
os.rename(src, dst)
Так оно работать не будет. Попробуйте ручками так переименовывать :). Не получится дать файлу новое имя если файл с таким именем уже существует.



py.user.next
vitrolov
Почему то не работает сортировка, в переменную f файлы попадают в таком порядке
4.txt, 1.txt, 2.txt, 3.txt.
Чтобы отсортировать имена файлов, тебе нужно сделать функцию сравнения и её подавать в функцию сортировки в виде ключа. С именами файлов лучше сделать отдельную функцию, а не использовать лямбду. Внутри функции сравнения тебе нужно задавать критерий сортировки имён. В данном случае хватит отцепления имени и приведения его к int и его возврату из функции, но в реальных программах там может и текст какой-то в именах оказаться, и скобочки круглые. Так что отдельная функция в качестве ключа пригодится. При возникновении каких-то нюансов отдельную функцию сравнения можно будет доработать. А с лямбдой тебе придётся выковыривать лямбду и выносить её в функцию сравнения и делать так, как изначально и надо было сделать.
vitrolov
Парни, большое спасибо за ответы. Понял в чем мой косяк, не правильное понимание документации. И как следствие ошибка в логике роботы скрипта.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB