-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
106 lines (91 loc) · 4.08 KB
/
main.py
File metadata and controls
106 lines (91 loc) · 4.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
from pathlib import Path
import shutil
import sys
import file_parser as parser
from normalize import normalize
def handle_media(filename: Path, target_folder: Path):
target_folder.mkdir(exist_ok=True, parents=True)
filename.replace(target_folder / normalize(filename.name))
def handle_other(filename: Path, target_folder: Path):
target_folder.mkdir(exist_ok=True, parents=True)
filename.replace(target_folder / normalize(filename.name))
def handle_archive(filename: Path, target_folder: Path):
# Створюємо папку для архіву
target_folder.mkdir(exist_ok=True, parents=True)
# Створюємо папку куди розпакуємо архів
# Беремо суфікс у файла і видаляємо replace(filename.suffix, '')
folder_for_file = target_folder / normalize(filename.name.replace(filename.suffix, ''))
# Створюємо папку для архіву з іменем файлу
folder_for_file.mkdir(exist_ok=True, parents=True)
try:
shutil.unpack_archive(str(filename.resolve()),
str(folder_for_file.resolve()))
except shutil.ReadError:
print(f'Це не архів {filename}!')
folder_for_file.rmdir()
return None
filename.unlink()
def handle_folder(folder: Path):
try:
folder.rmdir()
except OSError:
print(f'Помилка видалення папки {folder}')
def main(folder: Path):
parser.scan(folder)
for file in parser.JPEG_IMAGES:
handle_media(file, folder / 'images' / 'JPEG')
for file in parser.JPG_IMAGES:
handle_media(file, folder / 'images' / 'JPG')
for file in parser.PNG_IMAGES:
handle_media(file, folder / 'images' / 'PNG')
for file in parser.SVG_IMAGES:
handle_media(file, folder / 'images' / 'SVG')
for file in parser.AVI_VIDEO:
handle_media(file, folder / 'video' / 'AVI')
for file in parser.MP4_VIDEO:
handle_media(file, folder / 'video' / 'MP4')
for file in parser.MOV_VIDEO:
handle_media(file, folder / 'video' / 'MOV')
for file in parser.MKV_VIDEO:
handle_media(file, folder / 'video' / 'MKV')
for file in parser.DOC_DOCUMENTS:
handle_media(file, folder / 'documents' / 'DOC')
for file in parser.DOCX_DOCUMENTS:
handle_media(file, folder / 'documents' / 'DOCX')
for file in parser.TXT_DOCUMENTS:
handle_media(file, folder / 'documents' / 'TXT')
for file in parser.PDF_DOCUMENTS:
handle_media(file, folder / 'documents' / 'PDF')
for file in parser.XLSX_DOCUMENTS:
handle_media(file, folder / 'documents' / 'XLSX')
for file in parser.PPTX_DOCUMENTS:
handle_media(file, folder / 'documents' / 'PPTX')
for file in parser.MP3_AUDIO:
handle_media(file, folder / 'audio' / 'MP3')
for file in parser.OGG_AUDIO:
handle_media(file, folder / 'audio' / 'OGG')
for file in parser.WAV_AUDIO:
handle_media(file, folder / 'audio' / 'WAV')
for file in parser.AMR_AUDIO:
handle_media(file, folder / 'audio' / 'AMR')
for file in parser.OTHERS:
handle_other(file, folder / 'OTHERS')
for file in parser.ZIP_ARCHIVES:
handle_archive(file, folder / 'archives' / 'ZIP')
for file in parser.GZ_ARCHIVES:
handle_archive(file, folder / 'archives' / 'GZ')
for file in parser.TAR_ARCHIVES:
handle_archive(file, folder / 'archives' / 'TAR')
# Виконуємо реверс списку для того щоб видалити всі папки
for folder in parser.FOLDERS[::-1]:
handle_folder(folder)
def main_function():
try:
folder_for_scan = Path(sys.argv[1])
print(f'Start in folder {folder_for_scan.resolve()}')
main(folder_for_scan.resolve())
except:
print("File not found! Try again!")
if __name__ == '__main__':
main_function()
# TODO: запускаємо: python3 main.py `назва_папки_для_сортування`