-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
85 lines (69 loc) · 2.91 KB
/
main.py
File metadata and controls
85 lines (69 loc) · 2.91 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
import os
import sys
import time
import logging
import shutil
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
source_download = "/Users/sebastianrobles/Downloads"
source_images = "/Users/sebastianrobles/Documents/Images"
source_videos = "/Users/sebastianrobles/Documents/Videos"
source_files = "/Users/sebastianrobles/Documents/PDF files"
source_documents = "/Users/sebastianrobles/Documents/Files"
def make_unique(dest, name):
filename, extension = os.path.splitext(name)
counter = 1
while os.path.exists(f"{dest}/{name}"):
name = f"{filename}({str(counter)}){extension}"
counter += 1
return name
def move_file(dest, entry, name):
if os.path.exists(f"{dest}/{name}"):
unique_name = make_unique(dest, name)
oldName = os.path.join(dest, name)
newName = os.path.join(dest, unique_name)
os.rename(oldName, newName)
shutil.move(entry, dest)
class MoverHandler(FileSystemEventHandler):
def on_modified(self, event):
with os.scandir(source_download) as entries:
for entry in entries:
name = entry.name
self.check_video_files(entry, name)
self.check_image_files(entry, name)
self.check_pdf_files(entry, name)
self.check_document_files(entry, name)
def check_video_files(self, entry, name,):
video_extensions = [".mp4", ".mov", ".webm", ".avi"]
if any(name.lower().endswith(ext) for ext in video_extensions):
move_file(source_videos, entry, name)
logging.info(f"Move video file: {name}")
def check_image_files(self, entry, name):
image_extensions = [".png", ".jpg", ".jpeg", ".gif", ".svg", ".webp", ".tif", ".tiff"]
if any(name.lower().endswith(ext) for ext in image_extensions):
move_file(source_images, entry, name)
logging.info(f"Move image file: {name}")
def check_pdf_files(self, entry, name):
if name.endswith(".pdf"):
move_file(source_files, entry, name)
logging.info(f"Move pdf file: {name}")
def check_document_files(self, entry, name):
document_extensions = [".docx", ".xlsx", ".pptx", ".txt", ".csv"]
if any(name.lower().endswith(ext) for ext in document_extensions):
move_file(source_documents, entry, name)
logging.info(f"Moved document file: {name}")
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
path = source_download
event_handler = MoverHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()