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)
Чтобы создать Путь
объект, который похож на строку, но имеет различную функциональность:
- 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
Пожалуйста, не стесняйтесь вилка/клон/взломать, как вы пожелаете! Если вы это сделаете, я бы хотел услышать, как вы используете сценарий, будь то для музыкальных библиотек или что -то еще.
Если вы хотите решить некоторые конкретные проблемы с текущим кодом, вот несколько в моем списке:
- В
rn
иrn все
, построить в обработке для пространств-по сравнению с Нет никакого рабочего способа удалить подстроение без добавления символов! - В
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”