Python: эффективное переименование файлов в директории
Быстрый ответ
Если вам нужно быстро переименовать несколько файлов, вам поможет следующий сниппет на Python, использующий модуль os
. Допустим, мы хотим добавить префикс "new_"
к именам файлов. Вот как это будет выглядеть:
import os
for filename in os.listdir('.'):
if filename.endswith('.txt'):
os.rename(filename, f'new_{filename}')
Этот код выбирает все файлы с расширением .txt
в текущей директории и добавляет к их именам префикс "new_"
. В зависимости от ваших требований вы можете модифицировать условия отбора файлов и способ формирования новых имен.
Продвинутое групповое переименование
Удаление префиксов и предотвращение конфликтов имен файлов
Если вы хотите удалить префикс (например "CHEESE_"
) из имени файла и при этом не вызвать конфликт перезаписи файлов, используйте следующий код:
import os
for filename in os.listdir('.'):
if filename.startswith('CHEESE_'):
new_filename = filename.replace('CHEESE_', '', 1)
if not os.path.exists(new_filename):
os.rename(filename, new_filename)
Подобный скрипт удаляет префикс "CHEESE_"
из имени файла (однообразная замена), затем проверяет наличие файла с таким новым именем и затем переименовывает оригинальный файл.
Использование регулярных выражений для обработки сложных шаблонов имен
Для работы со сложными шаблонами имен файлов будет полезен модуль re
:
import os
import re
pattern = re.compile(r'^(CHEESE_)(.*)')
for filename in os.listdir('.'):
match = pattern.match(filename)
if match:
new_filename = match.group(2)
if not os.path.exists(new_filename):
os.rename(filename, new_filename)
Этот код применяет регулярные выражения для отбора нужных частей имени файла, а затем проверяет, не создавалось ли раньше файла с таким новым именем, чтобы избежать дублирования.
Рекурсивное переименование файлов с помощью os.walk
Чтобы переименовать файлы во всех поддиректориях, используйте функцию os.walk:
import os
for root, dirs, files in os.walk('.'):
for filename in files:
if 'CHEESE_' in filename:
new_filename = filename.replace('CHEESE_', '')
original_path = os.path.join(root, filename)
new_path = os.path.join(root, new_filename)
if not os.path.exists(new_path):
os.rename(original_path, new_path)
Этот сниппет обходит все поддиректории, переименовывая файлы и сохраняя историю их предыдущих расположений.
Визуализация
Допустим, у нас в каталоге есть следующие файлы:
🖼️ file1.jpg 🖼️ file2.jpg 🖼️ file3.jpg
Применим Python-скрипт для переименования этих файлов:
for index, old_name in enumerate(os.listdir(folder)):
new_name = f"picture_{index}{os.path.splitext(old_name)[1]}"
os.rename(old_name, new_name)
И теперь файлы выглядят так:
🖼️ picture_0.jpg 🖼️ picture_1.jpg 🖼️ picture_2.jpg
С помощью нашего скрипта на Python мы присвоили файлам новые имена, которые отражают их порядок в списке.
Профессиональные рекомендации и подготовка к будущему
Будьте готовы к возможным ошибкам
Никогда не забывайте обрабатывать возможные ошибки и исключительные ситуации:
try:
os.rename(original_path, new_path)
except OSError as e:
print(f"Error: {e}")
Такой подход поможет вам избежать непредсказуемых проблем и ситуаций, когда файлы могут быть заняты другими процессами.
Современные подходы: применение модуля pathlib
Для эффективного решения задачи переименования файлов рекомендуется использовать модуль pathlib
:
from pathlib import Path
folder = Path('.')
for file_path in folder.glob('*.txt'):
file_path.rename(f'new_{file_path.name}')
С pathlib
получается работать с файловыми шаблонами и структурированными путями гораздо удобнее.
Создайте резервную копию файлов перед началом работы
Бэкап перед важной работой с файлами -- это залог вашего спокойствия:
import shutil
shutil.copy2(original_path, backup_path)
Резервное копирование поможет вам избежать потери важных данных и не приятных ситуаций, когда что-то идёт не по плану.
Полезные материалы
- os — Разнообразные интерфейсы операционной системы — Документация Python 3.12.2
- Переименование нескольких файлов в каталоге с помощью Python – Stack Overflow
- Как осуществить массовое переименование файлов с использованием Python – GeeksforGeeks
- Учебный курс Python: Автоматизация разбора и переименования файлов – YouTube
- pathlib — Объектно-ориентированные файловые пути — Документация Python 3.12.2
- Автоматизируй скучные вещи с Python
- Работа с файлами в Python – Реальный Python