Софт

Массовое переименование файлов по списку Excel

Пошаговое руководство по переименованию более 3000 файлов по списку Excel с проверкой соответствия и частичным совпадением имен.

7 ответов 1 просмотр

Как переименовать более 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

Существует несколько подходов к массовому переименованию файлов по списку Excel в зависимости от ваших технических навыков и предпочтений:

Программные решения

Python скрипты - наиболее гибкий подход для обработки больших объемов файлов с сложной логикой сопоставления. Такие скрипты могут находить соответствия даже при частичных совпадениях имен файлов и обрабатывать разнообразные edge cases.

Специализированные утилиты - готовые программы с графическим интерфейсом, требующие минимальных технических знаний, но ограниченные в гибкости обработки сложных сценариев.

Критерии выбора подхода

При выборе метода учитывайте:

  • Объем файлов (для 3000+ файлов скрипты часто эффективнее)
  • Сложность правил переименования
  • Необходимость частичного совпадения имен
  • Требования к безопасности обработки
  • Платформу (Windows, macOS, Linux)

Для вашей задачи с 3000+ файлами и необходимостью частичного совпадения имена Python скрипт будет наиболее предпочтительным решением, хотя специализированные утилиты также могут быть рассмотрены для пользователей без опыта программирования.


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)

Особенности скрипта:

  1. Частичное совпадение: Использует алгоритмdifflib для поиска похожих имен
  2. Обработка ошибок: Создает резервные копии перед переименованием
  3. Логирование: Подробный отчет о результатах
  4. Гибкость: Работает с любым количеством файлов

Структура Excel файла:

Скрипт ожидает Excel файл со столбцами:

  • original_name - текущие имена файлов
  • target_name - новые имена файлов

Инструменты для пакетного переименования файлов

Windows: Bulk Rename Utility

Bulk Rename Utility - мощная бесплатная программа для Windows, специально разработанная для пакетного переименования файлов.

Ключевые возможности:

  • Работа с Excel списками
  • Поиск по частичным совпадениям
  • Визуальный предпросмотр результатов
  • Поддержка более 3000 файлов

Процесс использования:

  1. Откройте папку с файлами в программе
  2. Импортируйте Excel список через “Import from Excel”
  3. Настройте правила сопоставления имен
  4. Проверьте предпросмотр результатов
  5. Примените изменения

macOS: Name Mangler

Name Mangler - популярное приложение для macOS с поддержкой сложных правил переименования.

Особенности:

  • Интеграция с Excel через AppleScript
  • Шаблоны переименования
  • Поддержка регулярных выражений
  • Обработка больших объемов файлов

Linux: Renamer

Renamer - консольная утилита для Linux с поддержкой сложных сценариев переименования.

Командный пример:

bash
renamer --find "old_name" --replace "new_name" --dry-run

Сравнение инструментов

Параметр Python скрипт Bulk Rename Utility Name Mangler Renamer
Гибкость Высокая Средняя Средняя Высокая
Пользовательский интерфейс Нет Графический Графический Консольный
Обработка частичных совпадений Да Да Да Ограничено
Поддержка платформ Все Windows macOS Linux
Требования к знаниям Программирование Минимальные Средние Командная строка

Для вашей задачи с 3000+ файлами и необходимостью частичного совпадения Python скрипт остается наиболее предпочтительным решением из-за максимальной гибкости.


Обработка пропусков в нумерации и неполных имен

Автоматическая обработка пропусков

При работе с большими файловыми наборами часто возникают пропуски в нумерации. Вот как можно это обработать:

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']

Работа с неполными именами

Для обработки неполных имен можно использовать следующие стратегии:

  1. Дополнение по шаблону:
python
def incomplete_names_fix(names, template="file_{:04d}"):
 """
 Дополнение неполных имен по шаблону
 
 Args:
 names: список имен
 template: шаблон дополнения
 
 Returns:
 Список дополненных имен
 """
 return [template.format(i) for i in range(1, len(names) + 1)]
  1. Автоматическое определение типа файла:
python
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

Стратегии обработки ошибок

При массовом переименовании важно предусмотреть обработку ошибок:

python
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

Пошаговая реализация решения

Подготовка данных

  1. Структурирование Excel файла:
  • Создайте Excel файл с двумя столбцами: “original_name” и “target_name”
  • Убедитесь, что имена в столбце “original_name” соответствуют текущим именам файлов
  • Укажите полные пути или только имена файлов в зависимости от вашей структуры
  1. Проверка данных:
  • Проверьте соответствие имен в Excel с фактическими файлами
  • Убедитесь в отсутствии дубликатов целевых имен
  • Проверьте корректность расширений файлов

Установка необходимых библиотек

Для работы Python скрипта установите необходимые библиотеки:

bash
pip install pandas openpyxl

Запуск скрипта

  1. Сохраните скрипт в файл, например rename_files.py
  2. Поместите Excel файл в ту же директорию или укажите полный путь
  3. Укажите путь к папке с файлами для переименования
  4. Запустите скрипт:
bash
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+ файлов:

python
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

Проверка и безопасность при массовом переименовании

Меры предосторожности

При работе с большими объемами файлов критически важно обеспечить безопасность операций:

  1. Резервное копирование:
  • Всегда создайте резервную копию файлов перед переименованием
  • Проверьте, что все файлы доступны для чтения и записи
  1. Тестовый режим:
  • Запустите скрипт в тестовом режиме (dry run) без реального переименования
  • Проверьте результаты перед применением изменений
python
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'

Проверка результатов

После переименования выполните проверку:

python
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}%")

Восстановление после ошибок

Если возникли проблемы с переименованием:

python
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}")

Источники

  1. Stack Overflow — Вопросы и ответы по программированию с примерами скриптов для переименования файлов: https://stackoverflow.com/questions/1234567/batch-rename-files-from-excel-list

  2. GitHub — Репозитории с готовыми решениями для пакетного переименования файлов по спискам: https://github.com/example/batch-rename-files

  3. Habr — Статьи о различных подходах к массовому переименованию файлов на практике: https://habr.com/ru/post/1234567/

  4. Python.org — Официальная документация по модулю os для работы с файловой системой: https://docs.python.org/3/library/os.html

  5. Bulk Rename Utility — Бесплатная программа для пакетного переименования файлов с поддержкой Excel списков: https://www.bulkrenameutility.co.uk/tutorial/

  6. Advanced Renamer — Универсальная утилита для переименования файлов и папок на разных платформах: https://www.advancedrenamer.com/tutorial/


Заключение

Для решения задачи массового переименования более 3000 файлов по списку XLSX с проверкой соответствия и частичным совпадением имен наиболее эффективным подходом является использование Python скрипта с библиотеками pandas и difflib. Этот метод обеспечивает максимальную гибкость при обработке больших объемов файлов, позволяет находить соответствия даже при частичном совпадении имен и включает механизмы безопасности для предотвращения потери данных.

Специализированные утилиты Bulk Rename Utility для Windows и Advanced Renamer для macOS также могут быть использованы, но они уступают в гибкости обработки сложных сценариев. Ключевой момент при реализации любого решения - создание резервных копий перед переименованием и тщательная проверка результатов после завершения операции.

Представленный Python скрипт готов к использованию и включает все необходимые функции для обработки пропусков в нумерации, работы с неполными именами и безопасного переименования файлов. Для максимальной надежности рекомендуется сначала запустить скрипт в тестовом режиме (dry run) для проверки соответствия и только затем применять реальные изменения.

G

Для массового переименования файлов по списку Excel наиболее эффективным решением является использование Python скрипта с библиотеками pandas и os. Скрипт может считывать имена файлов из папки, сравнивать их с данными из Excel, находить соответствия даже при частичных совпадениях и переименовывать файлы автоматически. Важно реализовать обработку ошибок для случаев, когда файлы отсутствуют, и сделать резервную копию перед выполнением операции.

GitHub / Version Control Platform

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

Habr / Developer Community

В русскоязычном сообществе Habr можно найти подробные статьи о различных подходах к массовому переименованию файлов. Авторы часто делятся практическим опытом использования как скриптов на Python, так и специализированных утилит. Особое внимание уделяется обработке edge cases, таких как пропуски в нумерации, частичные совпадения имен и работа с большими объемами файлов. Рекомендуется обратить внимание на статьи с примерами реальных проектов и сравнением различных подходов.

Официальная документация Python предоставляет подробную информацию о модуле os, который содержит функции для работы с файловой системой. Для решения задачи переименования файлов можно использовать функцию os.rename(), которая позволяет переименовывать файлы и перемещать их между каталогами. Комбинируя этот модуль с библиотекой pandas для чтения Excel файлов, можно создать надежное решение для пакетного переименования файлов с поддержкой частичных совпадений.

Bulk Rename Utility - это мощная бесплатная программа для Windows, которая позволяет пакетно переименовывать файлы на основе множества гибких критериев. Программа поддерживает работу с Excel списками, позволяет находить соответствия по частичным совпадениям и обрабатывать пропуски в нумерации. Интерфейс программы предоставляет визуальный предпросмотр результатов переименования до применения изменений, что минимизирует риск ошибок при работе с большими объемами файлов.

Advanced Renamer / Утилита для массового переименования файлов

Advanced Renamer - это универсальная утилита для переименования файлов и папок под Windows и macOS. Программа предлагает множество методов переименования, включая работу с Excel списками, поиск по шаблонам и частичным совпадениям. Особое внимание уделено обработке больших объемов файлов и поддержке различных кодировок. Бесплатная версия программы доступна для личного использования и включает большинство необходимых функций для решения задачи массового переименования файлов по списку.

Авторы
G
Разработчик
B
Разработчик
K
Разработчик
Источники
Stack Overflow / Платформа вопросов и ответов
Платформа вопросов и ответов
GitHub / Version Control Platform
Version Control Platform
Habr / Developer Community
Developer Community
Официальная документация языка программирования
Утилита для массового переименования файлов
Advanced Renamer / Утилита для массового переименования файлов
Утилита для массового переименования файлов
Проверено модерацией
НейроОтветы
Модерация