Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 5, 2019 20:22:35

vitrolov
Зарегистрирован: 2019-12-05
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите переименовать файлы

Помогите поправить скрипт для переименования файлов.
Есть папка с файлами 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.
Объясните по возможности мой косяк и как исправить

Офлайн

#2 Дек. 5, 2019 22:20:03

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Помогите переименовать файлы

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)
Так оно работать не будет. Попробуйте ручками так переименовывать :). Не получится дать файлу новое имя если файл с таким именем уже существует.





Офлайн

#3 Дек. 6, 2019 01:34:16

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Помогите переименовать файлы

vitrolov
Почему то не работает сортировка, в переменную f файлы попадают в таком порядке
4.txt, 1.txt, 2.txt, 3.txt.
Чтобы отсортировать имена файлов, тебе нужно сделать функцию сравнения и её подавать в функцию сортировки в виде ключа. С именами файлов лучше сделать отдельную функцию, а не использовать лямбду. Внутри функции сравнения тебе нужно задавать критерий сортировки имён. В данном случае хватит отцепления имени и приведения его к int и его возврату из функции, но в реальных программах там может и текст какой-то в именах оказаться, и скобочки круглые. Так что отдельная функция в качестве ключа пригодится. При возникновении каких-то нюансов отдельную функцию сравнения можно будет доработать. А с лямбдой тебе придётся выковыривать лямбду и выносить её в функцию сравнения и делать так, как изначально и надо было сделать.



Отредактировано py.user.next (Дек. 6, 2019 01:38:20)

Офлайн

#4 Дек. 6, 2019 11:41:25

vitrolov
Зарегистрирован: 2019-12-05
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите переименовать файлы

Парни, большое спасибо за ответы. Понял в чем мой косяк, не правильное понимание документации. И как следствие ошибка в логике роботы скрипта.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version