Я хочу автоматизировать процесс перемещения файлов с похожими именами в отдельную папку.

Вопрос или проблема

У меня есть список путей ко всем папкам в подпапке, и некоторые имена путей содержат слова “Chapetrs”, “Chapter”, “chapter” или даже “chaptser”. Я хочу обнаружить эти слова в путях и поместить эти папки в большую папку с именем ALL_CHAPTERS. Предложите решение, которое учитывает возможные орфографические ошибки. Я думаю о чем-то вроде косинусного сходства или кластеризации k-средних.

Ответ или решение

Для автоматизации процесса размещения папок с похожими именами в отдельную папку, воспользуемся языком программирования Python и библиотеками, такими как os для работы с файловой системой и difflib для определения похожести строк. Мы создадим скрипт, который проверит, содержат ли пути к папкам слова "Chapter", "Chapters", "chapter", "chaptser" и их варианты с опечатками, а затем переместит эти папки в папку "ALL_CHAPTERS".

Вот шаги, которые мы будем выполнять:

  1. Сбор всех путей к папкам в список.
  2. Определение ключевых слов и использование алгоритма для нахождения схожих слов.
  3. Перемещение найденных папок в целевую папку.

Реализация

import os
import shutil
import difflib

# Функция для проверки, содержит ли строка похожие слова на "Chapter"
def is_similar_to_chapter(folder_name):
    keywords = ["chapter", "chapters", "chaptser"]  # Определяем ключевые слова
    threshold = 0.8  # Порог для определения схожести

    for keyword in keywords:
        # Используем метод SequenceMatcher для определения схожести
        similarity = difflib.SequenceMatcher(None, folder_name.lower(), keyword).ratio()
        if similarity >= threshold:
            return True
    return False

# Основная функция для перемещения папок
def move_chapter_folders(base_path):
    target_folder = os.path.join(base_path, "ALL_CHAPTERS")

    # Создаем целевую папку, если она не существует
    if not os.path.exists(target_folder):
        os.makedirs(target_folder)

    # Перебираем все папки в базовом каталоге
    for root, dirs, files in os.walk(base_path):
        for folder in dirs:
            folder_path = os.path.join(root, folder)
            if is_similar_to_chapter(folder):
                # Перемещаем папку в папку ALL_CHAPTERS
                shutil.move(folder_path, target_folder)
                print(f"Перемещено: {folder_path} -> {target_folder}")

# Путь к папке, в которой находятся ваши папки
base_path = "/path/to/your/base/directory"  # Замените на ваш путь
move_chapter_folders(base_path)

Разъяснения:

  1. Функция is_similar_to_chapter(folder_name): Эта функция определяет, похоже ли имя папки на одно из ключевых слов. Мы используем difflib.SequenceMatcher, чтобы определить процент схожести между именем папки и ключевыми словами. Если схожесть превышает определённый порог (в нашем случае 0.8, что означает 80%), то функция вернёт True.

  2. Функция move_chapter_folders(base_path): Эта функция:

    • Создаёт папку "ALL_CHAPTERS", если она не существует.
    • Проходит по всем папкам в указанном базовом пути и проверяет, содержат ли они схожие слова.
    • Перемещает все подходящие папки в созданную папку.

Примечания:

  • Не забудьте установить необходимые права доступа, чтобы скрипт мог перемещать папки.
  • Убедитесь, что путь в переменной base_path правильно указан и что скрипт имеет доступ к этому пути.
  • При запуске скрипта все папки с похожими именами будут перемещены, поэтому убедитесь, что у вас есть резервные копии важных данных.

Этот скрипт позволит вам эффективно организовать папки, содержащие упоминания о главах, даже если в названиях присутствуют опечатки или различные варианты написания.

Оцените материал
Добавить комментарий

Капча загружается...