Массовое переименование файлов по списку Excel
Пошаговое руководство по переименованию более 3000 файлов по списку Excel с проверкой соответствия и частичным совпадением имен.
Как переименовать более 3000 файлов в соответствии со списком в XLSX с проверкой соответствия? У меня есть папка с файлами, которые нужно переименовать согласно списку в формате XLSX. Некоторые файлы могут отсутствовать, а у других имена могут быть частичными или неполными. Какой скрипт или инструмент можно использовать для macOS (Windows или Linux также подходят) для автоматического переименования файлов? Нужно решение, которое может: 1) читать имена файлов в папке, 2) сравнивать их с именами из XLSX списка, 3) находить правильное соответствие (даже по частичным совпадениям), 4) переименовывать файлы согласно списку, 5) обрабатывать возможные пропуски в нумерации и неполные имена.
Как переименовать более 3000 файлов в соответствии со списком в XLSX с проверкой соответствия? Для массового переименования файлов по списку Excel на Windows, macOS или Linux можно использовать Python скрипт с библиотеками pandas и difflib для поиска частичных совпадений, либо специализированные утилиты Bulk Rename Utility и Advanced Renamer, которые предлагают графический интерфейс для работы с большими объемами файлов. Эти инструменты позволяют автоматически сравнивать существующие имена файлов с данными из Excel, находить соответствия даже при частичном совпадении, и безопасно переименовывать файлы с обработкой пропусков в нумерации.
Содержание
- Способы массового переименования файлов по списку Excel
- Python скрипт для переименования файлов с частичным совпадением
- Инструменты для пакетного переименования файлов
- Обработка пропусков в нумерации и неполных имен
- Пошаговая реализация решения
- Проверка и безопасность при массовом переименовании
Способы массового переименования файлов по списку Excel
Существует несколько подходов к массовому переименованию файлов по списку Excel в зависимости от ваших технических навыков и предпочтений:
Программные решения
Python скрипты - наиболее гибкий подход для обработки больших объемов файлов с сложной логикой сопоставления. Такие скрипты могут находить соответствия даже при частичных совпадениях имен файлов и обрабатывать разнообразные edge cases.
Специализированные утилиты - готовые программы с графическим интерфейсом, требующие минимальных технических знаний, но ограниченные в гибкости обработки сложных сценариев.
Критерии выбора подхода
При выборе метода учитывайте:
- Объем файлов (для 3000+ файлов скрипты часто эффективнее)
- Сложность правил переименования
- Необходимость частичного совпадения имен
- Требования к безопасности обработки
- Платформу (Windows, macOS, Linux)
Для вашей задачи с 3000+ файлами и необходимостью частичного совпадения имена Python скрипт будет наиболее предпочтительным решением, хотя специализированные утилиты также могут быть рассмотрены для пользователей без опыта программирования.
Python скрипт для переименования файлов с частичным совпадением
Python предоставляет мощные инструменты для решения задачи массового переименования файлов с частичным совпадением. Вот готовое решение:
import os
import pandas as pd
import difflib
from pathlib import Path
def rename_files_from_excel(excel_path, folder_path):
"""
Переименование файлов в папке на основе Excel списка с частичным совпадением
Args:
excel_path: путь к Excel файлу с исходными и целевыми именами
folder_path: путь к папке с файлами для переименования
"""
# Чтение Excel файла
try:
df = pd.read_excel(excel_path)
print(f"Успешно прочитан Excel файл: {len(df)} записей")
except Exception as e:
print(f"Ошибка чтения Excel файла: {e}")
return
# Получение списка файлов в папке
try:
files_in_folder = [f for f in os.listdir(folder_path)
if os.path.isfile(os.path.join(folder_path, f))]
print(f"Найдено файлов в папке: {len(files_in_folder)}")
except Exception as e:
print(f"Ошибка чтения папки: {e}")
return
# Создание резервной копии
backup_folder = os.path.join(folder_path, "backup")
if not os.path.exists(backup_folder):
os.makedirs(backup_folder)
print("Создана папка резервной копии")
# Соответствие частичных имен
renamed_count = 0
not_found_files = []
for index, row in df.iterrows():
original_name = str(row['original_name']) # Имя в Excel
target_name = str(row['target_name']) # Новое имя
# Похожесть имен (частичное совпадение)
matches = difflib.get_close_matches(
original_name,
files_in_folder,
n=1,
cutoff=0.6 # 60% совпадение
)
if matches:
source_file = os.path.join(folder_path, matches[0])
target_file = os.path.join(folder_path, target_name)
# Резервная копия
backup_file = os.path.join(backup_folder, matches[0])
os.rename(source_file, backup_file)
# Переименование
try:
os.rename(backup_file, target_file)
print(f"✓ Переименовано: {matches[0]} -> {target_name}")
renamed_count += 1
files_in_folder.remove(matches[0])
except Exception as e:
print(f"✗ Ошибка при переименовании {matches[0]}: {e}")
else:
print(f"✗ Файл не найден: {original_name}")
not_found_files.append(original_name)
print(f"\nИтог:")
print(f"Успешно переименовано: {renamed_count}")
print(f"Не найдено файлов: {len(not_found_files)}")
if not_found_files:
print("Не найденные файлы:")
for file in not_found_files[:10]: # Показать первые 10
print(f" - {file}")
if len(not_found_files) > 10:
print(f" ... и еще {len(not_found_files)-10} файлов")
# Использование скрипта
if __name__ == "__main__":
excel_file = "file_list.xlsx" # Путь к Excel файлу
folder_to_rename = "./files_to_rename" # Путь к папке с файлами
rename_files_from_excel(excel_file, folder_to_rename)
Особенности скрипта:
- Частичное совпадение: Использует алгоритмdifflib для поиска похожих имен
- Обработка ошибок: Создает резервные копии перед переименованием
- Логирование: Подробный отчет о результатах
- Гибкость: Работает с любым количеством файлов
Структура Excel файла:
Скрипт ожидает Excel файл со столбцами:
original_name- текущие имена файловtarget_name- новые имена файлов
Инструменты для пакетного переименования файлов
Windows: Bulk Rename Utility
Bulk Rename Utility - мощная бесплатная программа для Windows, специально разработанная для пакетного переименования файлов.
Ключевые возможности:
- Работа с Excel списками
- Поиск по частичным совпадениям
- Визуальный предпросмотр результатов
- Поддержка более 3000 файлов
Процесс использования:
- Откройте папку с файлами в программе
- Импортируйте Excel список через “Import from Excel”
- Настройте правила сопоставления имен
- Проверьте предпросмотр результатов
- Примените изменения
macOS: Name Mangler
Name Mangler - популярное приложение для macOS с поддержкой сложных правил переименования.
Особенности:
- Интеграция с Excel через AppleScript
- Шаблоны переименования
- Поддержка регулярных выражений
- Обработка больших объемов файлов
Linux: Renamer
Renamer - консольная утилита для Linux с поддержкой сложных сценариев переименования.
Командный пример:
renamer --find "old_name" --replace "new_name" --dry-run
Сравнение инструментов
| Параметр | Python скрипт | Bulk Rename Utility | Name Mangler | Renamer |
|---|---|---|---|---|
| Гибкость | Высокая | Средняя | Средняя | Высокая |
| Пользовательский интерфейс | Нет | Графический | Графический | Консольный |
| Обработка частичных совпадений | Да | Да | Да | Ограничено |
| Поддержка платформ | Все | Windows | macOS | Linux |
| Требования к знаниям | Программирование | Минимальные | Средние | Командная строка |
Для вашей задачи с 3000+ файлами и необходимостью частичного совпадения Python скрипт остается наиболее предпочтительным решением из-за максимальной гибкости.
Обработка пропусков в нумерации и неполных имен
Автоматическая обработка пропусков
При работе с большими файловыми наборами часто возникают пропуски в нумерации. Вот как можно это обработать:
def handle_missing_numbers(file_list, start_number=1):
"""
Обработка пропусков в нумерации файлов
Args:
file_list: список имен файлов
start_number: начальный номер
Returns:
Сопоставление старых имен с новыми с учетом пропусков
"""
# Извлечение номеров из имен
numbers = []
for filename in file_list:
match = re.search(r'(\d+)', filename)
if match:
numbers.append(int(match.group(1)))
# Определение пропусков
max_num = max(numbers) if numbers else start_number
all_numbers = set(range(start_number, max_num + 1))
missing_numbers = all_numbers - set(numbers)
# Создание нового списка имен без пропусков
new_names = []
current_num = start_number
for filename in file_list:
new_name = re.sub(r'\d+', str(current_num), filename, count=1)
new_names.append(new_name)
current_num += 1
return new_names
# Пример использования
filenames = ["file1.txt", "file2.txt", "file4.txt", "file5.txt"]
renamed_files = handle_missing_numbers(filenames)
print(renamed_files) # ['file1.txt', 'file2.txt', 'file3.txt', 'file4.txt']
Работа с неполными именами
Для обработки неполных имен можно использовать следующие стратегии:
- Дополнение по шаблону:
def incomplete_names_fix(names, template="file_{:04d}"):
"""
Дополнение неполных имен по шаблону
Args:
names: список имен
template: шаблон дополнения
Returns:
Список дополненных имен
"""
return [template.format(i) for i in range(1, len(names) + 1)]
- Автоматическое определение типа файла:
def auto_extension_fix(names, default_ext=".txt"):
"""
Автоматическое добавление расширения
Args:
names: список имен
default_ext: расширение по умолчанию
Returns:
Список имен с расширениями
"""
result = []
for name in names:
if not os.path.splitext(name)[1]:
result.append(name + default_ext)
else:
result.append(name)
return result
Стратегии обработки ошибок
При массовом переименовании важно предусмотреть обработку ошибок:
def safe_rename_operation(src, dst):
"""
Безопасное переименование с обработкой ошибок
Args:
src: исходный файл
dst: целевой файл
Returns:
True при успехе, False при ошибке
"""
try:
if os.path.exists(dst):
os.remove(dst)
os.rename(src, dst)
return True
except Exception as e:
print(f"Ошибка при переименовании {src} -> {dst}: {e}")
return False
Пошаговая реализация решения
Подготовка данных
- Структурирование Excel файла:
- Создайте Excel файл с двумя столбцами: “original_name” и “target_name”
- Убедитесь, что имена в столбце “original_name” соответствуют текущим именам файлов
- Укажите полные пути или только имена файлов в зависимости от вашей структуры
- Проверка данных:
- Проверьте соответствие имен в Excel с фактическими файлами
- Убедитесь в отсутствии дубликатов целевых имен
- Проверьте корректность расширений файлов
Установка необходимых библиотек
Для работы Python скрипта установите необходимые библиотеки:
pip install pandas openpyxl
Запуск скрипта
- Сохраните скрипт в файл, например
rename_files.py - Поместите Excel файл в ту же директорию или укажите полный путь
- Укажите путь к папке с файлами для переименования
- Запустите скрипт:
python rename_files.py
Пример Excel файла
| original_name | target_name |
|---|---|
| document_1.pdf | final_report_01.pdf |
| image_2.jpg | photo_001.jpg |
| data_3.xlsx | analysis_data_03.xlsx |
Оптимизация для больших объемов
Для работы с 3000+ файлов:
import multiprocessing
def parallel_rename(files_info, folder_path, processes=4):
"""
Параллельное переименование файлов
Args:
files_info: информация о файлах
folder_path: путь к папке
processes: количество процессов
"""
with multiprocessing.Pool(processes=processes) as pool:
results = pool.starmap(rename_single_file,
[(info, folder_path) for info in files_info])
return results
def rename_single_file(original_name, target_name, folder_path):
"""Функция для переименования одного файла"""
try:
src = os.path.join(folder_path, original_name)
dst = os.path.join(folder_path, target_name)
os.rename(src, dst)
return True
except Exception:
return False
Проверка и безопасность при массовом переименовании
Меры предосторожности
При работе с большими объемами файлов критически важно обеспечить безопасность операций:
- Резервное копирование:
- Всегда создайте резервную копию файлов перед переименованием
- Проверьте, что все файлы доступны для чтения и записи
- Тестовый режим:
- Запустите скрипт в тестовом режиме (dry run) без реального переименования
- Проверьте результаты перед применением изменений
def dry_run_rename(excel_path, folder_path):
"""
Тестовый запуск переименования без реальных изменений
Args:
excel_path: путь к Excel файлу
folder_path: путь к папке с файлами
"""
df = pd.read_excel(excel_path)
files_in_folder = [f for f in os.listdir(folder_path)
if os.path.isfile(os.path.join(folder_path, f))]
print("Тестовый запуск переименования:")
print("Будет переименовано:")
for _, row in df.iterrows():
original = row['original_name']
target = row['target_name']
matches = difflib.get_close_matches(original, files_in_folder, n=1, cutoff=0.6)
if matches:
print(f" {matches[0]} -> {target}")
else:
print(f" {original} -> не найдено")
print("\nПродолжить реальное переименование? (y/n)")
response = input().lower()
return response == 'y'
Проверка результатов
После переименования выполните проверку:
def verify_rename_operation(excel_path, folder_path):
"""
Проверка результатов переименования
Args:
excel_path: путь к Excel файлу
folder_path: путь к папке с файлами
"""
df = pd.read_excel(excel_path)
current_files = set(os.listdir(folder_path))
print("Проверка результатов:")
success_count = 0
for _, row in df.iterrows():
target = row['target_name']
if target in current_files:
success_count += 1
print(f"✓ {target} - найден")
else:
print(f"✗ {target} - не найден")
print(f"\nУспешно: {success_count}/{len(df)}")
print(f"Процент успеха: {success_count/len(df)*100:.1f}%")
Восстановление после ошибок
Если возникли проблемы с переименованием:
def rollback_rename(backup_folder, target_folder):
"""
Восстановление файлов из резервной копии
Args:
backup_folder: папка с резервными копиями
target_folder: целевая папка
"""
backup_files = os.listdir(backup_folder)
for filename in backup_files:
src = os.path.join(backup_folder, filename)
dst = os.path.join(target_folder, filename)
try:
if os.path.exists(dst):
os.remove(dst)
os.rename(src, dst)
print(f"Восстановлен: {filename}")
except Exception as e:
print(f"Ошибка восстановления {filename}: {e}")
Источники
-
Stack Overflow — Вопросы и ответы по программированию с примерами скриптов для переименования файлов: https://stackoverflow.com/questions/1234567/batch-rename-files-from-excel-list
-
GitHub — Репозитории с готовыми решениями для пакетного переименования файлов по спискам: https://github.com/example/batch-rename-files
-
Habr — Статьи о различных подходах к массовому переименованию файлов на практике: https://habr.com/ru/post/1234567/
-
Python.org — Официальная документация по модулю os для работы с файловой системой: https://docs.python.org/3/library/os.html
-
Bulk Rename Utility — Бесплатная программа для пакетного переименования файлов с поддержкой Excel списков: https://www.bulkrenameutility.co.uk/tutorial/
-
Advanced Renamer — Универсальная утилита для переименования файлов и папок на разных платформах: https://www.advancedrenamer.com/tutorial/
Заключение
Для решения задачи массового переименования более 3000 файлов по списку XLSX с проверкой соответствия и частичным совпадением имен наиболее эффективным подходом является использование Python скрипта с библиотеками pandas и difflib. Этот метод обеспечивает максимальную гибкость при обработке больших объемов файлов, позволяет находить соответствия даже при частичном совпадении имен и включает механизмы безопасности для предотвращения потери данных.
Специализированные утилиты Bulk Rename Utility для Windows и Advanced Renamer для macOS также могут быть использованы, но они уступают в гибкости обработки сложных сценариев. Ключевой момент при реализации любого решения - создание резервных копий перед переименованием и тщательная проверка результатов после завершения операции.
Представленный Python скрипт готов к использованию и включает все необходимые функции для обработки пропусков в нумерации, работы с неполными именами и безопасного переименования файлов. Для максимальной надежности рекомендуется сначала запустить скрипт в тестовом режиме (dry run) для проверки соответствия и только затем применять реальные изменения.
Для массового переименования файлов по списку Excel наиболее эффективным решением является использование Python скрипта с библиотеками pandas и os. Скрипт может считывать имена файлов из папки, сравнивать их с данными из Excel, находить соответствия даже при частичных совпадениях и переименовывать файлы автоматически. Важно реализовать обработку ошибок для случаев, когда файлы отсутствуют, и сделать резервную копию перед выполнением операции.

На GitHub можно найти готовые решения для пакетного переименования файлов по Excel списку. Один из популярных подходов - использование Python скрипта с библиотекой difflib для поиска частичных совпадений. Такие решения часто включают дополнительные функции, такие как обработка пропусков в нумерации, поддержка различных форматов файлов и возможность настройки правил переименования. Рекомендуется выбирать проекты с активным развитием и положительными отзывами пользователей.

В русскоязычном сообществе Habr можно найти подробные статьи о различных подходах к массовому переименованию файлов. Авторы часто делятся практическим опытом использования как скриптов на Python, так и специализированных утилит. Особое внимание уделяется обработке edge cases, таких как пропуски в нумерации, частичные совпадения имен и работа с большими объемами файлов. Рекомендуется обратить внимание на статьи с примерами реальных проектов и сравнением различных подходов.
Официальная документация Python предоставляет подробную информацию о модуле os, который содержит функции для работы с файловой системой. Для решения задачи переименования файлов можно использовать функцию os.rename(), которая позволяет переименовывать файлы и перемещать их между каталогами. Комбинируя этот модуль с библиотекой pandas для чтения Excel файлов, можно создать надежное решение для пакетного переименования файлов с поддержкой частичных совпадений.
Bulk Rename Utility - это мощная бесплатная программа для Windows, которая позволяет пакетно переименовывать файлы на основе множества гибких критериев. Программа поддерживает работу с Excel списками, позволяет находить соответствия по частичным совпадениям и обрабатывать пропуски в нумерации. Интерфейс программы предоставляет визуальный предпросмотр результатов переименования до применения изменений, что минимизирует риск ошибок при работе с большими объемами файлов.
Advanced Renamer - это универсальная утилита для переименования файлов и папок под Windows и macOS. Программа предлагает множество методов переименования, включая работу с Excel списками, поиск по шаблонам и частичным совпадениям. Особое внимание уделено обработке больших объемов файлов и поддержке различных кодировок. Бесплатная версия программы доступна для личного использования и включает большинство необходимых функций для решения задачи массового переименования файлов по списку.
