Skip to content

Instantly share code, notes, and snippets.

@syamn
Created March 17, 2016 14:41
Show Gist options
  • Save syamn/123199a856013e3eeda6 to your computer and use it in GitHub Desktop.
Save syamn/123199a856013e3eeda6 to your computer and use it in GitHub Desktop.
import os, re, logging
# Configuration
sourceDir = '/Users/name/Dropbox/カメラアップロード/'
# sourceDir = '/tmp/test/'
logFileName = 'organizer.log'
# Setup logger
streamHandler = logging.StreamHandler()
streamHandler.setLevel(logging.INFO)
fileHandler = logging.FileHandler(sourceDir + logFileName, 'a+')
fileHandler.setLevel(logging.DEBUG)
fileHandler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.addHandler(streamHandler)
logger.addHandler(fileHandler)
logger.info("Starting DropBox photo organizer")
# Setup regex
pattern = r"^(\d{4})-(\d{2})-(\d{2})\s(\d{2})\.(\d{2})\.(\d{2})"
matcher = re.compile(pattern)
_, _, files = next(os.walk(sourceDir), (None, None, []))
total_files = len(files)
current_num = 0
for file in files:
current_num += 1
logger.debug("processing: " + file)
name = os.path.splitext(file)[0]
# Check regex
result = matcher.match(name)
if not result:
logger.warning("Skip file: " + file + " (illegal name) [" + str(current_num) + "/" + str(total_files) + "]")
continue
year, month, day, hour, minute, second = result.groups()
# Ensure directory exists
targetDir = os.path.join(sourceDir, year, month)
os.makedirs(targetDir, exist_ok=True)
# Move file
logger.info("Moving file: " + file + " [" + str(current_num) + "/" + str(total_files) + "]")
os.rename(os.path.join(sourceDir, file), os.path.join(targetDir, file))
logger.removeHandler(fileHandler)
logger.removeHandler(streamHandler)
logging.shutdown()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment