1
|
|
|
"""CLI Версия CMS.""" |
2
|
|
|
import os |
3
|
|
|
|
4
|
|
|
vers = '0.3.4' |
5
|
|
|
|
6
|
|
|
|
7
|
|
|
def ask_paths(): |
8
|
|
|
"""Запуск и в интерактивном режиме.""" |
9
|
|
|
input_dir = input('Путь до исходной директории: ') |
10
|
|
|
output_dir = input('Путь до конечной директории: ') |
11
|
|
|
return input_dir, output_dir |
12
|
|
|
|
13
|
|
|
|
14
|
|
|
def start_interactive(): |
15
|
|
|
"""Запуск интерактивного режима.""" |
16
|
|
|
answers = ask_paths() |
17
|
|
|
input_dir = answers[0] |
18
|
|
|
output_dir = answers[1] |
19
|
|
|
if input_dir is None or output_dir is None: |
20
|
|
|
print('Не указана начальная или конечная директория') |
21
|
|
|
return |
22
|
|
|
elif input_dir == output_dir: |
23
|
|
|
print('Начальная и конечная директории не должны совпадать') |
24
|
|
|
return |
25
|
|
|
else: |
26
|
|
|
main_process(input_dir, output_dir) |
27
|
|
|
|
28
|
|
|
|
29
|
|
|
def main_process(input_dir, output_dir): |
30
|
|
|
"""Принимает начальную и конечную директории, запускает копирование. |
31
|
|
|
|
32
|
|
|
Параметры |
33
|
|
|
---------- |
34
|
|
|
input_dir : string |
35
|
|
|
Путь начальной директории в виде строки. |
36
|
|
|
output_dir : string |
37
|
|
|
Путь конечной директории в виде строки. |
38
|
|
|
|
39
|
|
|
Не возвращает результатов. |
40
|
|
|
------- |
41
|
|
|
""" |
42
|
|
|
pass |
43
|
|
|
|
44
|
|
|
|
45
|
|
|
start_interactive() |
46
|
|
|
exit() |
47
|
|
|
|
48
|
|
|
for path, subdirs, files in os.walk(input_dir): |
|
|
|
|
49
|
|
|
for file in files: |
50
|
|
|
# Перегоняем все MP3 в целевую директорию, |
51
|
|
|
# потом разберемся что с ними делать |
52
|
|
|
# Хотя, лучше искать только нужные (отбрасывать лайвы и ремиксы |
53
|
|
|
# и перегонять уже без них) |
54
|
|
|
filtered = re.search('.*mp3', file) |
|
|
|
|
55
|
|
|
if filtered is not None: |
56
|
|
|
print(f'{path}/{filtered.group(0)}') |
57
|
|
|
shutil.copyfile(f'{path}/{filtered.group(0)}', |
|
|
|
|
58
|
|
|
f'{output_dir}/{filtered.group(0)}') |
59
|
|
|
|
60
|
|
|
source_file = [] |
61
|
|
|
# 3.1. Удаление ремиксов и лайвов |
62
|
|
|
regex = r'.*\(.*[Rr]emix.*\).*|.*\(.*[Ll]ive.*\).*' |
63
|
|
|
for files in os.walk(output_dir): |
|
|
|
|
64
|
|
|
for file in files[2]: |
65
|
|
|
try: |
66
|
|
|
source_file.append(re.search(regex, file).group(0)) |
67
|
|
|
except Exception: |
68
|
|
|
pass |
69
|
|
|
for file in source_file: |
70
|
|
|
print('Removing Remix: ', file) |
71
|
|
|
os.remove(f'{output_dir}/{file}') |
72
|
|
|
source_file.clear() # Очищаем список |
73
|
|
|
|
74
|
|
|
# 3.2. Готовим список свежепринесенных файлов с вычищенными ремиксами и лайвами |
75
|
|
|
for files in os.walk(output_dir): |
76
|
|
|
for file in files[2]: |
77
|
|
|
try: |
78
|
|
|
source_file.append(file) |
79
|
|
|
except Exception: |
80
|
|
|
pass |
81
|
|
|
|
82
|
|
|
# 3.3. Убираем из имен файлов мусор (номера треков в различном формате) |
83
|
|
|
for file in source_file: |
84
|
|
|
new_file = re.sub(r'^[\d{1,2}\s\-\.]*', '', file) |
85
|
|
|
shutil.move(f'{output_dir}/{file}', f'{output_dir}/{new_file}') |
86
|
|
|
source_file.clear() |
87
|
|
|
|