Найти - Пользователи
Полная версия: Работа с os.rename
Начало » Python для новичков » Работа с os.rename
1
Darksol89
Всем привет!

Подскажите плиз, возможно ли с помощью os.rename переименовать файл, но не все название, а только одно слово заменить?
Т.е. к примеру у меня есть 3 файла с именем “InnoSwitch-CH Flyback Design119.pdf_PIXls Designer_zh_hans”, разница только в расширении, вместо слова “PIXls Designer” мне нужно вставить другое слово.
Гуглил, но нашел только примеры с названием из чисел.

Как реализовать это на Питоне 3 ?
sander
Darksol89
как заменить подстроку в строке?
Darksol89
Скорее всего да, питон изучаю недавно, не запомнил пока все правильные названия
py.user.next
  
>>> import re
>>> 
>>> s = 'InnoSwitch-CH Flyback Design119.pdf_PIXls Designer_zh_hans'
>>> 
>>> o = re.sub(r'(\.pdf_)[^_]+(_zh_hans)$', r'\1word\2', s)
>>> o
'InnoSwitch-CH Flyback Design119.pdf_word_zh_hans'
>>> 
Darksol89
спасибо.
а как заставить скрипт заходить в папку, в которой лежат подпапки, лезть в каждую из них и переименовывать каждый 3-й файл, т.е. менять слово в них?
За меня код писать не нужно, желательно чтобы объяснили как это сделать, что применить или почитать про это конкретно. Дабы я знал как применить это в будущем
ZerG
На форуме есть тема - поиск файла - там даже код есть как просматривать все папки
py.user.next
Darksol89
а как заставить скрипт заходить в папку, в которой лежат подпапки, лезть в каждую из них и переименовывать каждый 3-й файл, т.е. менять слово в них?
Функция os.walk() раскладывает сразу на папки и файлы, найдёшь примеры её применения, они все одинаковые.
Есть ещё os.listdir(), но там надо будет ещё определять где папка, а где файл через os.path.isdir().
Есть ещё и glob.glob(), но это довольно непрактичный модуль, так как не гибкий.

В основном ты заходишь в папку, берёшь имена файлов как обычные строки, потом к этим строкам применяешь какую-то свою функцию, которая принимает одну строку, а возвращает другую строку. И когда у тебя строки готовы (исходная и новая), ты просто передаёшь их в os.rename().
Загвоздка здесь только в том, что нельзя просто имена подавать в os.rename(), нужно сначала приделать их к пути той папки, в которой находишься, иначе os.rename() их не найдёт, так как будет искать эти имена в текущей папке, которая остаётся одной и той же с момента запуска скрипта. Поэтому нужно будет применять склеивание через os.path.join().
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