On Sun, May 17, 2009 at 4:17 AM, Arnaud Delobelle <arno...@googlemail.com> wrote: > > Daniel Fetchinson <fetchin...@googlemail.com> writes: > > >> I need to get the creation date from a jpeg file in Python. Googling > >> brought up a several references to apparently defunct modules. The best > >> way I have been able to find so far is something like this: > >> > >> from PIL import Image > >> img = Image.open('img.jpg') > >> exif_data = img._getexif() > >> creation_date = exif_data[36867] > >> > >> Where 36867 is the exif tag for the creation date data (which I found by > >> ooking at PIL.ExifTags.TAGS). But this doesn't even seem to be > >> documented in the PIL docs. Is there a more natural way to do this? > > > > > > Have you tried http://sourceforge.net/projects/exif-py/ ? > > > > HTH, > > Daniel > > I will have a look - thank you. > > -- > Arnaud > -- > http://mail.python.org/mailman/listinfo/python-list
I use the EXIF module to do bulk renames of all the pictures in a directory. Here's my hackeration... import sys import os import re import time import win32file import datetime import EXIF DATE_FORMAT = '%Y%m%d_%H%M%S' allowed_files = ['.asf', '.jpg', '.mod', '.mov', '.mpeg', '.mpg', '.jpeg', '.png', '.tiff', '.tif'] named_files = [] r = re.compile('.mod',) def is_a_file(path, file, xtn): """ We only want to rename the files right? Return True or False depending on whether object is a file or a directory """ if os.path.isdir(os.path.join(path,file)): print "This is a directory not a file. Will not rename!" return False if allowed_files.count(xtn): return True else: print file, "is not a in the list of allowed extensions. Will not rename!" return False def renameFile(path, file): """ Rename <old_filename> with the using the date/time created or modified for the new file name""" old_filename = os.path.join(path,file) (name,xtn) = os.path.splitext(file) xtn = xtn.lower() if re.search(r, xtn): xtn_old = xtn xtn = '.mpg' print xtn_old, 'changed to', xtn if is_a_file(path, file, xtn): created_time = os.path.getctime(old_filename) modify_time = os.path.getmtime(old_filename) f = open(old_filename, 'rb') try: tags=EXIF.process_file(f) except UnboundLocalError: print "No EXIF data available for ", file tags = {} exif_time = 0 try: tags['EXIF DateTimeOriginal'] exif_time = str(tags['EXIF DateTimeOriginal']) exif_time = int(time.mktime(time.strptime(exif_time, "%Y:%m:%d %H:%M:%S"))) except (KeyError,ValueError): print 'No EXIF DateTimeOriginal for ', file exif_time = 0 f.close() if created_time < modify_time: local_time = time.localtime(created_time) else: local_time = time.localtime(modify_time) if exif_time: if exif_time < local_time: local_time = time.localtime(exif_time) date_time_name = time.strftime(DATE_FORMAT, local_time) copy_number = named_files.count(date_time_name) named_files.append(date_time_name) new_name = date_time_name + "_" + str(copy_number) + xtn new_filename = os.path.join(path, new_name) print 'Renaming:', old_filename, 'to', new_filename #print 'Created Time = ', created_time #print 'Modified Time = ', modify_time #print 'EXIF Time = ', exif_time #print 'Time Used = ', local_time os.rename(old_filename, new_filename) if __name__ == '__main__': if os.path.isdir(sys.argv[1]): """Recursively walk the directory listed as Arg 1 and work each file.""" print for path,dirs,files in os.walk(sys.argv[1]): for file in files: renameFile(path, file) else: print "\nNo path to rename specified.\n" print "Usage:\n\tpython", sys.argv[0], "<path to directory of source files>" sys.exit(1) -- We are all slave to our own paradigm. -- Joshua Williams If the letters PhD appear after a person's name, that person will remain outdoors even after it's started raining. -- Jeff Kay Fascism is a term used to describe authoritarian nationalist political ideologies or mass movements that are concerned with notions of cultural decline or decadence and seek to achieve a millenarian national rebirth by exalting the nation or race, and promoting cults of unity, strength and purity. - Wikipedia The story of postwar American conservatism is best understood as a continual replay of a single long-standing debate. On one side are those who have upheld the Burkean ideal of replenishing civil society by adjusting to changing conditions. On the other are those committed to a revanchist counterrevolution, the restoration of America's pre-welfare state ancien regime. And, time and again, the counterrevolutionaries have won. The result is that modern American conservatism has dedicated itself not to fortifying and replenishing civil society but rather to weakening it through a politics of civil warfare. -- Sam Tanenhaus -- http://mail.python.org/mailman/listinfo/python-list