Рубрики
Без рубрики

Нужно переименовать файлы оптом? Вот Python CLI с именем File-Renamer

Совместное использование CLI Python для массовых файлов. Tagged с Showdev, Python, Cli.

Github Repo: https://github.com/isalevine/file-ronamer

Одним из моих хобби является создание электронной музыки, и благодаря таким ресурсам, как SamplesFrommars.com У меня есть тонны и тонны аудиофайлов для управления. Одним из недостатков машины My Main Drum является то, что он ограничивает читаемые имена файлов-все после того, как определенное количество символов отключено, и любые имен-сборы будут указывать на первый файл с этим именем.

Многие из моей музыкальной библиотеки имеют папки, полные длинных, повторяющихся имен файлов, как это:

Я очень устал переименовать их один за другим, поэтому я написал свой первый сценарий Python, File-renamer, как CLI, чтобы сделать массовое прорезь!

По сути, я хотел одновременно изменить или удалить определенные строки из нескольких имен файлов. В качестве CLI File-Renamer также предоставляет способ навигации по файловой системе для быстрого и легкости изменения файлов в разных папках из командной строки.

Настраивать

После клонирования репо к своему компьютеру вы можете запустить файл-бросок с $ python3 script.py в каталоге репо.

Единственная конфигурация, которую вам нужно сделать, – это установить путь по умолчанию. Смотрите script.py Строка 37 (на момент написания этой статьи) для изменения кода:

# script.py

path = os.path.realpath('./drum-samples') # set default path here

Использовать

Вы можете ориентироваться в своей файловой системе, используя стандартные команды Unix pwd , ls и CD Анкет Переименование выполняется в конкретной папке с rn или rn все команды Чтобы уйти, введите Q или уйти Анкет

Справочник изменения:

cd

Список файлов:

ls

Справочник печати:

pwd

Переименовать (один файл, изменить все имя файла):

rn  

Бывший.

$ Enter command: rn Airhorn.wav AIRHOOOORN.wav

Переименовать все (несколько файлов, замените последнюю строку, найдено):

rn all  

Бывший.

$ Enter command: rn all Hihat HH

Примечание: в настоящее время rn все заменит последний соответствующий экземпляр встречается в имени файла (т.е. сначала совпадение встречается при чтении справа налево). Смотрите str.rpartition () в документах Python за дополнительной информацией.

Программа выхода:

q / quit

Функциональность этого сценария питается от Python’s Pathlib , ОС и OS.Path модули. Вот как они используются:

Навигация файловой системы:

  • OS.Path.RealPath (PATH) – Возвращает строку с полной FilePath для предоставленного файла или каталога
  • OS.Path.join (Path1, Path2, …) – Возвращает соединенную строку из поставляемых путей (с включенными сепараторами)
  • PATH.PARENT – Возвращает строку родительского каталога пути

Все эти методы возвращают строки, которые можно передать в Pathlib. Путь (Str) Чтобы создать Путь объект, который похож на строку, но имеет различную функциональность:

В коде файла-обрены, вот как они реализованы:

# script.py
import pathlib
import os

path = os.path.realpath('./drum-samples')   # set default path here
current_directory = pathlib.Path(path)

...

# inside main loop, after getting user_input
        if user_input[0:2] == "cd":
            temp_directory = current_directory

            if user_input[3:5] == "..":
                new_path = current_directory.parent
                current_directory = pathlib.Path(new_path)
            else:
                new_path = os.path.join(current_directory, user_input[3:])
                current_directory = pathlib.Path(new_path)
...

        if not os.path.isdir(current_directory):
            print("Not a valid directory!")
            current_directory = temp_directory

Здесь, когда user_input это компакт диск .. , a new_path строка создается из current_directory.parent , и превращается в объект пути с Текущий каталог. Путь (new_path) .

В противном случае, когда пользовательский ввод CD За последующим чем -то другим, new_path это строка, созданная с помощью OS.Path.join Чтобы добавить содержимое user_input на конец current_directory Анкет

Проверить имена файлов и каталогов:

В приведенном выше фрагменте мы также видим, что OS.Path.isdir () используется, чтобы добавить ошибку, если каталог не найден.

OS.Path Модуль предоставляет ряд полезных методов проверки, в том числе два, которые используются в этом сценарии:

  • OS.Path.isdir (Path) – Возвращает истинный Если поставляемый путь является существующим каталогом или ложный если не
  • OS.Path.isfile (Path) – Возвращает истинный Если поставляемый путь является существующим файлом или ложный если не

В дополнение к приведенному фрагменту, мы видим OS.Path.isfile () В действии здесь:

# script.py

# Here, array comes from using .split() on user_input
    if array[1] and array[2] and os.path.isfile(array[1]):
        rename_whole_filename(array[1], array[2])

    else:
        print("Rename aborted! (Probably because the original filename wasn't found.)")

После подтверждения этого user_input переменная, теперь разделена на массив , содержит существующее имя файла в массив [1] и новое имя файла в массив [2] , OS.Path.isfile (Array [1]) позволяет нам подтвердить, что существующее имя файла на самом деле существует . В противном случае он вернется ложный , с которым мы справляемся с еще: сообщение об ошибке.

То же самое происходит с OS.Path.isdir (current_directory) Выше-это подтверждает, что current_directory существующий каталог.

Переименовать файлы:

Весело, основная функциональность всего этого CLI сводится к одному простому ОС Метод:

Да, вот и все. Поставьте строку для SRC и DST и os.rename () позаботится об изменении имени файла.

Вот как это используется в коде:

# script.py
def rename_partial_filename(filename, input, output):
    src = str(filename)
    head, sep, tail = src.rpartition(input)
    dst = head + output + tail
    os.rename(src, dst)
    return dst

Здесь, src.rpartition (input) Позволяет нам искать строки имени файла SRC С правого налега вход . Если обнаружен, этот один экземпляр заменяется данной строкой вывод и реконкатенирован как строка DST Анкет Призыв Os.Rename (SRC, DST) изменит имя файла в вашей системе.

Примечание. Этот метод в настоящее время сталкивается с ошибками, когда файл не содержит заданный вход! Вместо этого он будет продолжать искать с .rpartition () Пока он не найдет совпадение в своих родительских каталогах, Потенциально вызывает ошибки каталогов! Вас предупредили …

Вот и все! Теперь вы готовы массово сбросить свои файлы!:)

Еще раз, вот ссылка на github Repo: https://github.com/isalevine/file-renamer

Пожалуйста, не стесняйтесь вилка/клон/взломать, как вы пожелаете! Если вы это сделаете, я бы хотел услышать, как вы используете сценарий, будь то для музыкальных библиотек или что -то еще.

Если вы хотите решить некоторые конкретные проблемы с текущим кодом, вот несколько в моем списке:

  1. В rn и rn все , построить в обработке для пространств-по сравнению с Нет никакого рабочего способа удалить подстроение без добавления символов!
  2. В rn все , Создайте возможность указать, сколько подстроки заменяется. (Первоначально, Все совпадения были заменены-следовательно, переход на использование .rpartition () ...) Добавьте выходные журналы для изменений имени файла-В зависимости от текста вывод выводится в консоль, но может быть легко захвачен в файле журнала.

Спасибо за чтение! Пожалуйста, не стесняйтесь поделиться любыми советами или советами для работы с Python’s Pathlib , ОС и OS.Path Модули ниже!

Оригинал: “https://dev.to/isalevine/need-to-rename-files-in-bulk-here-s-a-python-cli-called-file-renamer-2l8m”