-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFileSorter.py
More file actions
81 lines (63 loc) · 2.25 KB
/
FileSorter.py
File metadata and controls
81 lines (63 loc) · 2.25 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
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
# pip install watchdog for these packages to work
import re
import os
import time
import config
class FileHandler(FileSystemEventHandler):
def on_modified(self, event):
for filename in os.listdir(config.sorting_dir):
if '.' not in filename:
continue
name, extension = filename.rsplit('.', 1)
if extension in config.ignored_extensions:
continue
try:
folder_dir = f'{config.sorting_dir}\\' + self.get_folder(extension)
except TypeError:
continue
if not os.path.isdir(folder_dir):
os.mkdir(folder_dir)
try:
self.move_file(name, extension, folder_dir)
except PermissionError:
continue
@staticmethod
def get_folder(extension):
for folder in config.folders:
if extension in config.folders[folder]:
return folder
if config.misc_enabled:
return 'Misc'
return None
@staticmethod
def move_file(name, extension, folder_dir):
def is_file(folder_file):
return bool(re.match(fr'{name}.{extension}|{name}(\s\(([0-9]+)\)\.)', folder_file))
files = sorted(filter(is_file, os.listdir(folder_dir)))
files = files[-1:] + files[:-1]
if files[:1] != [f"{name}.{extension}"]:
filename = f"{name}.{extension}"
else:
i = 2
for file in files[1:]:
num = int(re.search(r'\s\(([0-9]+)\)\.', file).group(1))
if i != num:
break
i += 1
filename = f"{name} ({i}).{extension}"
src = f"{config.sorting_dir}\\{name}.{extension}"
dst = f"{folder_dir}\\{filename}"
os.rename(src, dst)
event_handler = FileHandler()
observer = Observer()
observer.schedule(event_handler, config.sorting_dir, recursive=False)
observer.start()
print("Successfully initialised")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()