forked from dizir7772/AssistBot
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcleanfolder.py
More file actions
102 lines (84 loc) · 3.6 KB
/
cleanfolder.py
File metadata and controls
102 lines (84 loc) · 3.6 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
from pathlib import Path
from messagebox import Messagebox
from screen import Screen
import readchar as rc
class CleanFolder:
""" Клас що отримує в користувача шлях до папки та сортує в ньому файли """
IMAGE = []
VIDEO = []
DOCUMENT = []
AUDIO = []
ARCHIVE = []
MY_OTHER = []
REGISTER_EXTENSIONS = {
"JPEG": IMAGE, "JPG": IMAGE, "SVG": IMAGE, "PNG": IMAGE,
"AVI" : VIDEO, "MP4":VIDEO, "MOV" : VIDEO, "MKV": VIDEO,
"DOC": DOCUMENT, "DOCX": DOCUMENT, "TXT": DOCUMENT, "PDF": DOCUMENT, "XLSX": DOCUMENT, "PPTX": DOCUMENT,
"MP3": AUDIO, "OGG": AUDIO, "WAV": AUDIO, "AMR": AUDIO,
"ZIP": ARCHIVE, "GZ": ARCHIVE, "TAR": ARCHIVE, "RAR": ARCHIVE,
}
FOLDERS = []
EXTENSIONS = set()
UNKNOWN = set()
def __init__(self) -> None:
pass
def get_extension(self, filename: str) -> str:
return Path(filename).suffix[1:].upper()
def scan(self, folder: Path) -> None:
for item in folder.iterdir():
if item.is_dir():
if item.name not in ("Archives", "Video", "Audio", "Documents", "Images", "MY_OTHER"):
self.FOLDERS.append(item)
self.scan(item)
continue
ext = self.get_extension(item.name)
fullname = folder / item.name
if not ext:
self.MY_OTHER.append(fullname)
else:
try:
container = self.REGISTER_EXTENSIONS[ext]
self.EXTENSIONS.add(ext)
container.append(fullname)
except KeyError:
self.UNKNOWN.add(ext)
self.MY_OTHER.append(fullname)
def handle_media(self, filename: Path, target_folder: Path):
target_folder.mkdir(exist_ok=True, parents=True)
filename.replace(target_folder / filename.name)
def handle_other(self, filename: Path, target_folder: Path):
target_folder.mkdir(exist_ok=True, parents=True)
filename.replace(target_folder / filename.name)
def handle_folder(self, folder: Path):
try:
folder.rmdir()
except OSError:
pass
def sort(self, folder: Path):
self.scan(folder)
for file in self.IMAGE:
self.handle_media(file, folder / "Image")
for file in self.VIDEO:
self.handle_media(file, folder / "Video")
for file in self.DOCUMENT:
self.handle_media(file, folder / "Documents")
for file in self.AUDIO:
self.handle_media(file, folder / "Audio")
for file in self.MY_OTHER:
self.handle_other(file, folder / "Other")
for file in self.ARCHIVE:
self.handle_media(file, folder / "Archives")
for folder in self.FOLDERS[::-1]:
self.handle_folder(folder)
def interactive(self):
self._screen = Screen(
'Успіх', 'ESC - назад')
while True:
self._screen.draw()
# self._screen.title = 'Перегляд нотаток'
# Messagebox(
# self._screen, "Нотатки не знайдені...\nДодайте нові або змініть параметри пошуку").draw()
Messagebox(self._screen, "Всі файли успішно відсортовано, можете повернутися до основного меню.").draw()
key = rc.readkey()
if key == rc.key.ESC:
break