Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.08 KB | None | 0 0
  1. import exifread
  2. import os
  3. import pandas as pd
  4.  
  5.  
  6. def convert_metatag_to_decimal(metatag_coordinate, direction_reference=None):
  7. """
  8. Converts funky exif number format to float number
  9. :param metatag_coordinate: Metatag coordinate (ie "[28, 120289/10000, 0]")
  10. :param direction_reference: "N", "S", "E", or "W"
  11. :return: float number
  12. """
  13. coordinate_list = str(metatag_coordinate)[1:-1].split(', ')
  14. decimal_coordinates = float(coordinate_list[0] + str(float(coordinate_list[1].split('/')[0]) /
  15. float(coordinate_list[1].split('/')[1]) / 60)[1:])
  16. if direction_reference and (str(direction_reference) == 'S' or str(direction_reference) == 'W'):
  17. decimal_coordinates *= -1
  18. return decimal_coordinates
  19.  
  20.  
  21. file_path = os.path.dirname(__file__)
  22.  
  23. file_list = os.listdir(file_path)
  24.  
  25. # Get list of exif data tags
  26. tag_list = []
  27. for file_name in file_list:
  28. if file_name.split(".")[-1] == 'JPG' or file_name.split(".")[-1] == 'jpg':
  29. with open('{0}\\{1}'.format(file_path, file_name), 'rb') as picture:
  30. try:
  31. tags = exifread.process_file(picture)
  32. except TypeError:
  33. continue
  34. for tag in tags:
  35. if tag != 'JPEGThumbnail':
  36. tag_list.append(str(tag))
  37. break
  38.  
  39. # List for pandas.DataFrame objects to concatenate later
  40. dataframe_list = []
  41.  
  42. # Iterate through photos
  43. for file_name in file_list:
  44. if file_name.split(".")[-1] == 'JPG' or file_name.split(".")[-1] == 'jpg':
  45. with open('{0}\\{1}'.format(file_path, file_name), 'rb') as picture:
  46. print "Working on", file_name
  47. try:
  48. tags = exifread.process_file(picture)
  49. except TypeError:
  50. continue
  51.  
  52. value_list = [str(tags[tag]) for tag in tag_list if tag != 'file_name']
  53. new_row = pd.DataFrame([value_list], columns=tag_list, index=[file_name])
  54.  
  55. # Convert values to decimal
  56. new_row.at[file_name, 'GPS GPSLatitude'] = \
  57. convert_metatag_to_decimal(new_row.loc[file_name, 'GPS GPSLatitude'],
  58. new_row.loc[file_name, 'GPS GPSLatitudeRef'])
  59. new_row.at[file_name, 'GPS GPSLongitude'] = \
  60. convert_metatag_to_decimal(new_row.loc[file_name, 'GPS GPSLongitude'],
  61. new_row.loc[file_name, 'GPS GPSLongitudeRef'])
  62. if len(new_row.loc[file_name, 'GPS GPSAltitude'].split('/')) > 1:
  63. fraction = new_row.loc[file_name, 'GPS GPSAltitude'].split('/')
  64. new_row.at[file_name, 'GPS GPSAltitude'] = float(fraction[0]) / float(fraction[1])
  65. else:
  66. new_row.at[file_name, 'GPS GPSAltitude'] = float(new_row.loc[file_name, 'GPS GPSAltitude'])
  67.  
  68. dataframe_list.append(new_row)
  69.  
  70. final_frame = pd.concat(dataframe_list)
  71. final_frame.index.name = 'FileName'
  72. writer = pd.ExcelWriter('{0}\\AllTags.xlsx'.format(file_path), engine='xlsxwriter')
  73. final_frame.sort_index(axis=1).to_excel(writer, sheet_name='Sheet1')
  74. writer.save()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement