-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCameraFilesSort.py
More file actions
66 lines (59 loc) · 2.74 KB
/
CameraFilesSort.py
File metadata and controls
66 lines (59 loc) · 2.74 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
import logging
import shutil
from datetime import datetime
import tkinter as tk
from tkinter import filedialog
from pathlib import Path
# Import constants from your separate file
from Constants import CAMERA_FILE_TO_FOLDER_MAPPING, CAMERA_FOLDER_NAME
def setup_logging(base_folder):
log_directory = base_folder / "logs"
log_directory.mkdir(exist_ok=True)
log_file = log_directory / f"CameraFilesSort_{datetime.now().strftime('%d-%m-%Y_%H-%M-%S')}.log"
logging.basicConfig(level=logging.DEBUG,
handlers=[logging.FileHandler(str(log_file)),
logging.StreamHandler()],
format='%(asctime)s %(levelname)s: %(message)s', force=True)
return logging.getLogger(__name__)
def create_folder_if_not_exists(folder):
if not folder.exists():
folder.mkdir()
logging.debug(f'Folder {folder} created.')
def handle_files(base_folder):
file_entries = list(base_folder.iterdir())
if not file_entries:
logging.error("The folder is empty. Terminating...")
quit()
# Create necessary folders based on existing file types
detected_extensions = {entry.suffix[1:].upper() for entry in file_entries if entry.is_file()}
for extension in detected_extensions:
if extension in CAMERA_FILE_TO_FOLDER_MAPPING:
folder_name = CAMERA_FILE_TO_FOLDER_MAPPING[extension]
if folder_name not in ['MP4', 'JPG']: # Skip initial creation for MP4 and JPG
folder = base_folder / folder_name
create_folder_if_not_exists(folder)
# Move files
for entry in file_entries:
if entry.is_file():
file_extension = entry.suffix[1:].upper()
if file_extension in CAMERA_FILE_TO_FOLDER_MAPPING:
destination_folder = base_folder / CAMERA_FILE_TO_FOLDER_MAPPING[file_extension]
create_folder_if_not_exists(destination_folder) # Create the folder here if not exists
try:
shutil.move(str(entry), str(destination_folder))
logging.debug(f'Moving file {entry} to {destination_folder}')
except Exception as e:
logging.error(f'Failed to move file {entry}: {str(e)}')
else:
logging.error(f'Extension {file_extension} is not recognized (file={entry})')
def main():
root = tk.Tk()
root.withdraw()
base_folder_path = filedialog.askdirectory(title='Select the folder for sorting files')
if not base_folder_path:
logging.error("No folder selected. Exiting...")
return
base_folder = Path(base_folder_path)
logger = setup_logging(base_folder)
handle_files(base_folder)
logger.info("Termination of program.")