Переименование файлов с помощью python
Скрипт на python, с помощью которого можно быстро переименовать множество файлов в папке.
Уже несколько раз ставала задача переименовать несколько сотен аудио файлов в папке.
Вручную это делать долго и не круто, поэтому делаю это с помощью python, запустил скрипт и все файлы тут же переименованы.
Напишу здесь пару скриптов, которыми пользуюсь.
Первый скрипт добавляет номер и подчеркивание к имени файла, например 001_filename1.mp3, 002_filename2.mp3 . 010_filename10.mp3 .. 123_filename123.mp3.
Второй скрипт обрезает указанные части из начала и конца файла, например site.com — filename_slkdsiek.mp3 переименуется в filename.mp3.
import glob, os
def rename(dir):
count = 1
for pathAndFilename in glob.iglob(os.path.join(dir, «*.mp3»)):
if count > 99:
numberStr = str(count)
elif count > 9 and count < 100:
numberStr = «0» + str(count)
elif count < 10:
numberStr = «00» + str(count)
title, ext = os.path.splitext(os.path.basename(pathAndFilename))
new_filename = numberStr + «_» + title
os.rename(pathAndFilename, os.path.join(dir, new_filename + ext))
count = count + 1
rename(r’D:\audio’) # папка с файлами
import glob, os
def rename(dir):
for pathAndFilename in glob.iglob(os.path.join(dir, «*.mp3»)):
title, ext = os.path.splitext(os.path.basename(pathAndFilename))
strlen = len(title)
begin = 10 # указать сколько символов вначале нужно обрезать
end = strlen — 12 # указать сколько символов в с конца нужно обрезать
new_filename = title[begin:end]
os.rename(pathAndFilename, os.path.join(dir, new_filename + ext))
rename(r’G:\folder’) # указать папку с файлами, которые нужно переименовать
Как переименовать файлы в Python

Если имеется только имя файла, воспользуемся os.path.splitext() , который возвращает кортеж из имени файла и расширения:
import os for file in os.listdir(): name, ext = os.path.splitext(file) # return ('путь до файла без расщирения', '.txt') new_name = f"name>_newext>" os.rename(file, new_name)
pathlib
С помощью встроенного модуля pathlib
Path.rename(new_name)
from pathlib import Path for file in os.listdir(): f = Path(file) new_name = f"f.stem>_newf.suffix>" f.rename(new_name)
shutil.move
Модуль Shutil предлагает ряд высокоуровневых операций с файлами и коллекциями файлов. В частности, предусмотрены функции, поддерживающие копирование и удаление файлов.
import shutil old_source = '/Users/r/Desktop/old_source.txt' new_source = '/Users/r/Desktop/new_source.txt' newFileName = shutil.move(old_source, new_source) print("Новый файл:", newFileName) # Новый файл: /Users/r/Desktop/new_source.txt
Python переименовать файл, если уже существует по указанному пути
Всем привет! Подскажите, пожалуйста, как можно переименовать файл, если он уже существует указанному пути.
По типу «Новая папка» уже существует и переименовывается в -> «Новая папка 1», если «Новая папка 1» существует то в «Новая папка (2)» и т.д.
Есть такой код:
if os.path.isfile(file):
try:
if not os.path.exists(os.path.join(desktop_path, sort_folder_path, file)):
shutil.copy(os.path.join(desktop_path, file), sort_folder_path)
os.remove(os.path.join(desktop_path, file))
print(f»Перемещение файла в папку ‘Разобрать’ — Завершено»)
else:
print(f» уже есть в папке . Перемещение невозможно»)
continue
except PermissionError as perr:
print(«Файл скорее всего — папка»)
print(perr)
continue
except FileExistsError as e:
print(«Файл уже существует»)
continue
else: # если папка
try:
if not os.path.exists(os.path.join(desktop_path, sort_folder_path, file)):
shutil.move(os.path.join(desktop_path, file), sort_folder_path)
print(f»Перемещение папки в папку ‘Разобрать’ — Завершено»)
else:
os.rename(os.path.join(desktop_path, sort_folder_path, file), ‘1’)
shutil.move(os.path.join(desktop_path, file), sort_folder_path)
print(f»Перемещение папки в папку ‘Разобрать’ — Завершено»)
except FileExistsError as e:
print(«Файл уже существует»)
continue
Но он не работает, почему то(
1 ответ
Проблема в вашем коде заключается в том, что вы не реализовали логику переименования файла с добавлением числа к имени файла в случае его существования. Для этого можно использовать цикл while, который будет проверять наличие файла с новым именем и увеличивать число в скобках до тех пор, пока не найдет уникальное имя. Вот пример исправленного кода:
«`pythonimport osimport shutildef rename_file_if_exists(file_path): if not os.path.exists(file_path): return file_path base_name, extension = os.path.splitext(file_path) index = 1 new_file_path = f» ()» while os.path.exists(new_file_path): index += 1 new_file_path = f» ()» return new_file_path# Пример использования функцииfile_path = «Новая папка.txt»new_file_path = rename_file_if_exists(file_path)print(f»Новое имя файла: «)«`
Этот код будет проверять наличие файла по указанному пути и, если файл уже существует, будет добавлять числовой индекс к имени файла для создания уникального имени.
Владислав КузнецовУченик (116) 2 дня назад
Это похоже на ответ из чат GPT, но я уже пробовал с ним общаться, ничего толкового он не советует. И это решение в том числе
Как переименовать файл
Пытаюсь переименовать файлы с русского на английский. Например если файл: Архив.rar нужно его переименовать в Archiv.rar. Но у меня выдаёт ошибку:
Traceback (most recent call last): File "C:\Projects\Test_Project\Test.py", line 100, in os.rename(split(file_path)[-1], new_name + '.' + split(file_path)[-1].split('.')[-1]) FileNotFoundError: [WinError 2] The system cannot find the file specified: 'Архив.rar' -> 'Arhiv.rar'
То есть я правильно беру по срезам все, но не понимаю почему не работает.
Отслеживать
задан 14 янв 2023 в 5:49
196 12 12 бронзовых знаков
Если Вам не принципиален факт самостоятельной реализации транслитерации то pip install transliterate
14 янв 2023 в 6:25
Не пишите все в одну строчку. Используйте временные переменные и разберитесь на каком именно шаге у вас ошибка