custom dir, multiple search patterns
Signed-off-by: Lev Rusanov <30170278+JDM170@users.noreply.github.com>
This commit is contained in:
58
rename.py
58
rename.py
@@ -1,28 +1,54 @@
|
|||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from sys import exit
|
from sys import exit, argv
|
||||||
from os import listdir, rename
|
from os import listdir, rename
|
||||||
from os.path import splitext, realpath
|
from os.path import splitext, realpath, exists
|
||||||
from re import search
|
from re import search
|
||||||
|
|
||||||
number_pattern = r"\[\d{1,}\]" # Паттерн для поиска номера серии
|
|
||||||
extension_versions = [".mkv", ".avi"] # Список поддерживаемых расширений
|
patterns = [ # Паттерны для поиска номера эпизода
|
||||||
|
[r"\[\d+\]", 1, -1],
|
||||||
|
[r"[s]\d+[e]\d+", 4, None]
|
||||||
|
]
|
||||||
|
extension_versions = [".mkv", ".avi", ".mp4"] # Список поддерживаемых расширений
|
||||||
|
|
||||||
|
|
||||||
def rename_file(full_path, file_name):
|
def rename_file(current_name, splitted, settedPath):
|
||||||
found_number = search(number_pattern, file_name[0]) # Ищем номер серии, если он есть то продолжаем
|
for pattern in patterns:
|
||||||
if found_number is not None:
|
found_number = search(pattern[0], splitted[0]) # Ищем номер эпизода, если он есть то продолжаем
|
||||||
found_number = found_number.group()[1:-1] # Убираем квадратные скобки
|
if found_number is None:
|
||||||
current_path = realpath(full_path) # Получаем путь до файла
|
continue
|
||||||
new_path = "{}{}{}".format(current_path.replace(full_path, ""), found_number, file_name[1]) # Новый путь до файла
|
found_number = found_number.group()[ pattern[1]:pattern[2] ]
|
||||||
|
current_path = "{}\\{}".format(settedPath, current_name) if settedPath is not None else realpath(current_name) # Получаем путь до файла
|
||||||
|
new_path = "{}{}{}".format(current_path.replace(current_name, ""), found_number, splitted[1]) # Новый путь до файла
|
||||||
rename(current_path, new_path) # Переименовываем файл
|
rename(current_path, new_path) # Переименовываем файл
|
||||||
print("\"{}\" successfully renamed to \"{}\".".format(full_path, found_number + file_name[1]))
|
print("\"{}\" successfully renamed to \"{}\".".format(current_name, found_number + splitted[1]))
|
||||||
|
|
||||||
|
|
||||||
|
def main(folder):
|
||||||
|
for file_name in listdir(folder):
|
||||||
|
splitted_name = splitext(file_name) # Разделяем имя файла и его расширение, итог: кортеж (0 - имя файла, 1 - расширение)
|
||||||
|
if splitted_name[1] in extension_versions: # Проверяем совпадения расширения со списком, если есть совпадения то переименовываем файл
|
||||||
|
rename_file(file_name, splitted_name, folder) # Вызываем функцию переименования файла
|
||||||
|
folder_input()
|
||||||
|
|
||||||
|
|
||||||
|
def folder_input():
|
||||||
|
folder = input("\nВведите путь до папки с эпизодами: ")
|
||||||
|
if exists(folder):
|
||||||
|
main(folder)
|
||||||
|
return
|
||||||
|
if (folder == "") and not exists(folder):
|
||||||
|
main(None)
|
||||||
|
return
|
||||||
|
folder_input()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
for file_name in listdir():
|
try:
|
||||||
splitted_name = splitext(file_name) # Разделяем имя файла и его расширение, итог: кортеж (0 - имя файла, 1 - расширение)
|
print("Чтобы оставить текущую директорию нажмите 'Enter'")
|
||||||
if splitted_name[1] in extension_versions: # Проверяем совпадения расширения со списком, если есть совпадения то переименовываем файл
|
print("Чтобы выйти нажмите 'Ctrl + C'")
|
||||||
rename_file(file_name, splitted_name) # Вызываем функцию переименования файла
|
folder_input()
|
||||||
exit()
|
except KeyboardInterrupt:
|
||||||
|
exit()
|
||||||
|
|||||||
Reference in New Issue
Block a user