-
Notifications
You must be signed in to change notification settings - Fork 0
/
library-import.py
107 lines (91 loc) · 3.48 KB
/
library-import.py
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
103
104
105
landing_location = '/home/bms/import/'
final_location = '/home/bms/orginals/'
photo_types = ('.jpg', '.JPG', '.png', '.PNG', '.jpeg', '.JPEG')
video_types = ('.mp4', '.avi', '.3gp')
########################
import os, datetime, sys
import exifread
photos_in_landing_location = []
videos_in_landing_location = []
flag_new_files = False
def move(date_taken, filename):
moved = False
year = date_taken.strftime("%Y")
month = date_taken.strftime("%b").lower()
day = date_taken.strftime("%d") + "-"
final_location_full = final_location + year + "/" + month
final_filename = final_location_full + "/" + day + os.path.basename(filename)
try:
skip = os.path.isfile(final_filename)
if skip:
print ("Removing duplicate: ", filename)
os.remove(filename)
if not skip:
try:
os.makedirs(final_location_full)
except:
pass
print ("Moving ", filename, " to ", final_filename)
os.rename(filename, final_filename)
moved = True
try:
os.removedirs(os.path.dirname(filename))
except:
pass
except OSError:
print ("[MOVE] Error for: ", filename)
return moved
for dirpath, dirnames, filenames in os.walk(landing_location):
for filename in filenames:
if filename.endswith(photo_types):
photos_in_landing_location.append(os.path.join(dirpath, filename))
if filename.endswith(video_types):
videos_in_landing_location.append(os.path.join(dirpath, filename))
for filename in photos_in_landing_location:
with open(filename, 'rb') as fh:
tags = exifread.process_file(fh, stop_tag="EXIF DateTimeOriginal")
try:
exif = str(tags["EXIF DateTimeOriginal"]) # 2015:02:25 18:08:07
date_taken = datetime.datetime.strptime(exif, "%Y:%m:%d %H:%M:%S")
if(move(date_taken, filename)):
flag_new_files = True
except:
print ("Trying filename 8 digits for: ", filename)
try:
base_filename = os.path.basename(filename)
index = 0
for i, c in enumerate(base_filename):
if c.isdigit():
index = i
break
try:
date_from_filename = base_filename[index:index+8]
# This will check we have a real date in the format YYYYMMDD
date_taken = datetime.datetime.strptime(date_from_filename, "%Y%m%d")
if(move(date_taken, filename)):
flag_new_files = True
except:
print ("[EXIF] Error for: ", filename)
except:
print ("[EXIF] Error for: ", filename)
for filename in videos_in_landing_location:
base_filename = os.path.basename(filename)
# Find first number location
index = 0
for i, c in enumerate(base_filename):
if c.isdigit():
index = i
break
try:
date_from_filename = base_filename[index:index+8]
# This will check we have a real date in the format YYYYMMDD
date_taken = datetime.datetime.strptime(date_from_filename, "%Y%m%d")
if(move(date_taken, filename)):
flag_new_files = True
except:
print ("[VIDEO DATE] Error for: ", filename)
# Set exit codes
if(flag_new_files):
sys.exit(0)
else:
sys.exit(1)