Batch photo renaming with FTP interaction

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • brendan
    New Member
    • Nov 2008
    • 1

    Batch photo renaming with FTP interaction

    I'm trying to write a code that batch renames photos. In the end each photo should be named:

    AABBB1111YYYYMM 222 where

    AABBB1111 defines a given place. (i.e. CAMTL = montreal and four digits define the area in Montreal.)

    YYYYMM reveals the year and month that the photo was taken based on EXIF data.

    222 allows for 999 photos of a given place in a given month.

    That is to say, if there are three photos of the Olympic Stadium in Montreal taken in June 2008, the photos ought to be renamed to:

    CAMTL8012200806 001
    CAMTL8012200806 002
    CAMTL8012200806 003

    BUT there is an FTP with a bunch of photos already uploaded. So say, hypothetically, someone had previously uploaded 3 photos of the Olympic Stadium in Montreal taken in June 2008. Then my pictures of the Olympic Stadium ought to be renamed to:

    CAMTL8012200806 004
    CAMTL8012200806 005
    CAMTL8012200806 006

    This is where my program stops working. I can't figure out why my FTP interaction isn't working. I'm trying to search a folder in the FTP for pictures with the same first 15 digits as the file that's being renamed. If any exist, then I need to add 1 to the last three digits.

    I'm kind of new to Python. Can anyone help me out? Here's my script:


    Code:
    # PHOTO RENAMER
    
    import EXIF
    import sys
    import os
    import string
    import datetime
    import ftplib
    
    # FUNCTION DEFINITIONS
    
    def date_from_exif(file):
       data = EXIF.process_file(file, details=False, debug=False)
       if not data or not data.has_key('EXIF DateTimeOriginal'):
          return False
       else:
          return str(data['EXIF DateTimeOriginal'])
    
    def format_exif_date(date):
       name = date.replace(':', '')
       name = name.replace(' ', '')
       return name
    
    def rename_image(filename):
       if not valid_image(filename):
          return
       try:
          file = open(filename, 'rb')
       except:
          print "'%s': Cannot open for reading.\n" % filename
          return
       date = date_from_exif(file)
       if (date == False):
          return
       file.close()
       newname = dir[-9:] + format_exif_date(date)
       ftpdir = ftp.nlst('testfolder/')
       return ftpdir
       same_month = list()
       for item in ftpdir:
          if item[:15] == newname:
             same_month.append(item)
          else:
             return
       return same_month
       if same_month == []:
          suffix = "001"
       else:
          suffix = same_month[-1]
          suffix = float(suffix[16:18])
          suffix = suffix + 1
          suffix = suffix.zfill(3)
          suffix = str(suffix)
       return suffix
       newname = newname + suffix + ".jpg"
       if os.path.exists(newname):
          print '[FAIL] ' + filename + ' already exists, ignoring...'
          return
       else:
          print filename + ' -> ' + newname
          os.rename(filename, newname)
    
    def valid_image(filename):
       return string.lower(os.path.splitext(filename)[1]) in ['.jpg', '.jpeg']
    
    # MAIN LOOP
    
    dir = raw_input("Enter directory for image name conversion\n")
    if not os.path.isdir(dir):
       print '"' + dir + '" is not a directory. Exiting...'
       exit()
    
    os.chdir(dir)
    files = os.listdir('.')
    # confirm?
    confirm = raw_input('Process ' + str(len(files)) + ' files in directory "' + dir + '"? [y/n]: ')
    if string.lower(confirm) != 'y':
       print 'Exiting...'
       exit()
    
    ftp = ftplib.FTP("www.****.******.ca")
    ftp.login('******', '******')
    
    for filename in files:
       rename_image(filename)
    
    ftp.quit()
Working...