python_utilities/mediacopy/file_copy.py
Alexander Hosking 3bb1600e62 Chore: Move to functions
This makes it easy to add new functions and features
Added Removal of empty directories
Added root function to control flow and make development easier
2023-08-16 00:21:10 -04:00

108 lines
3.8 KiB
Python

import os
import time
import sys
from shutil import copy2
import filecmp
import pathlib
from PIL import Image, ExifTags
import pendulum
INGEST_DIR = pathlib.PureWindowsPath(
r'C:\Users\ahosking\Nextcloud\Camera Uploads\Alex\2022')
PHOTO_LIBRARY = '//192.168.1.4/photos/photo_library/'
# TODO: Add dircectory traversal
file_list = []
def compare_and_move():
# move_list = []
for root, d_names, f_names in os.walk(INGEST_DIR, topdown=False):
for file in f_names:
file_name = os.path.join(root, file)
print(file_name)
file_list.append(file_name)
print(root, d_names, f_names)
print(file_list)
print(len(file_list))
process_files(file_list)
remove_empty_directories(INGEST_DIR)
def process_files(file_list):
for item in file_list:
cur_file = pathlib.Path(os.path.join(INGEST_DIR, item))
print(cur_file)
# print("last modified: %s" % time.ctime(os.path.getmtime(cur_file)))
# created_date = cur_file.stat().st_ctime
# Check for Exif Data
# if no exif data revert to file created time
try:
created_date = Image.open(cur_file)._getexif()[36867]
parsed_date = pendulum.parse(created_date)
except:
created_date = (time.ctime(os.path.getctime(cur_file)))
parsed_date = pendulum.parse(created_date, strict=False)
filename, file_extension = os.path.splitext(item)
filename = os.path.basename(item).split(
'/')[-1] # Critical to the process
print()
print(filename)
print()
if not file_extension.lower() in (".nef", ".jpg", ".mp4", ".mov"):
continue
# print(filename, file_extension)
# print(created_date)
# print()
# print(parsed_date)
year = str(parsed_date.year)
month = str(parsed_date.month).zfill(2)
day = str(parsed_date.day).zfill(2)
destination = "%s%s/%s/%s/%s" % (PHOTO_LIBRARY,
year, month, day, filename)
# print(destination)
print("We want to move %s to %s%s/%s/%s." %
(filename, PHOTO_LIBRARY, year, month, day))
# check if the directory exists
if not os.path.isdir(os.path.join(PHOTO_LIBRARY, str(year))):
print("We couldn't find your directory.")
os.makedirs(os.path.join(PHOTO_LIBRARY, str(year)))
if not os.path.isdir(os.path.join(PHOTO_LIBRARY, str(year), str(month))):
print("We couldn't find your directory, matching year and month")
os.makedirs(os.path.join(PHOTO_LIBRARY, str(year), str(month)))
if not os.path.isdir(os.path.join(PHOTO_LIBRARY, str(year), str(month), str(day))):
print("We couldn't find your directory, matching year month and day")
os.makedirs(os.path.join(PHOTO_LIBRARY,
str(year), str(month), str(day)))
# We should be copying, creating a source and destination hash
# comparing the files and then deleting the source
print()
print("Copying %s to %s" % (cur_file, destination))
copy2(cur_file, destination)
if filecmp.cmp(cur_file, destination) == True:
print("%s and %s are a match. Time to delete %s" %
(cur_file, destination, cur_file))
os.remove(cur_file)
# TODO:
# Find files with no extension and save them + directory to a file
def remove_empty_directories(directory):
for root, d_names, f_names in os.walk(directory, topdown=False):
print(root, d_names, f_names)
if len(d_names) == 0 and len(f_names) == 0:
print("I want to remove:", root)
os.rmdir(root)
if not os.path.isdir(root):
print(root, "was removed.")
if __name__ == "__main__":
compare_and_move()