35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
import sys
|
|
import os
|
|
import dateutil.parser as dparser
|
|
import re
|
|
|
|
target = sys.argv[1]
|
|
|
|
if not os.path.isdir(target):
|
|
print('Invalid path. Try again.')
|
|
|
|
for entry in os.scandir(target):
|
|
# Put file extension to one side for safekeeping
|
|
split = entry.name.split('.')
|
|
extension = split[1]
|
|
name = split[0].replace(',', '').split('#')[0] # Discard all commas, and unique id doodad
|
|
head, sep, tail = name.partition(' ') # Discard leading date
|
|
split2 = tail.split()
|
|
date = dparser.parse(split2[-1], fuzzy=True) # Parse the date
|
|
folder_path = split2[0] + split2[1] # TODO Fragile
|
|
title = re.search(r'\d+-\d+\s[\d\w\s]*', tail)
|
|
if re.match:
|
|
title = title.group(0).strip().replace(' ', '_')
|
|
# Add date back
|
|
if date is not None:
|
|
title += "_" + date.strftime('%Y-%m-%d')
|
|
# Rename file
|
|
source = entry.path
|
|
actual_folder_path = '{}/{}'.format(target, folder_path)
|
|
dest = "{}/{}.{}".format(actual_folder_path, title, extension)
|
|
print ("Source: " + source)
|
|
print ("Dest: " + dest)
|
|
if not os.path.isdir(actual_folder_path):
|
|
os.mkdir(actual_folder_path)
|
|
os.rename(source, dest)
|