Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ph1048/2b6b877b7ee0f8a76d4a1086c6e0bbb2 to your computer and use it in GitHub Desktop.
Save ph1048/2b6b877b7ee0f8a76d4a1086c6e0bbb2 to your computer and use it in GitHub Desktop.
Google Photos Takeout archive holds a JSON file with photo/video metadata, thing is that the naming for this JSON file is not always so obvious. This takes care of resolving the name with all the variants I found so far.
import re as _re
import json as _json
JSON_EXTENSION = '.json'
def find_json_for_file(file: Path):
try:
if file.with_name(file.name + JSON_EXTENSION).is_file():
# file.jpg -> file.jpg.json
the_json_path = file.with_name(file.name + JSON_EXTENSION)
elif file.with_name(file.name.replace(file.suffix, JSON_EXTENSION)).is_file():
# file.jpg -> file.json
the_json_path = file.with_name(file.name.replace(file.suffix.lower(), JSON_EXTENSION))
elif len(file.name) >= 47:
# fileee...eee.jpg -> fileee...eee..json
the_json_path = file.with_name(file.name[0:46] + JSON_EXTENSION)
elif bool(_re.search(r'^(.+)(\(\d+\))(\..+)$', file.name)):
weird_search = _re.search(r'^(.+)(\(\d+\))(\..+)$', file.name)
if file.with_name(weird_search.group(1) + JSON_EXTENSION).is_file():
# file(1).jpg -> file.json
the_json_path = file.with_name(weird_search.group(1) + JSON_EXTENSION)
else:
# file(1).jpg -> file.jpg(1).json
the_json_path = file.with_name(weird_search.group(1) + weird_search.group(3) + weird_search.group(2) + JSON_EXTENSION)
#print('Using ' + the_json_path.name + ' for ' + file.name)
with open(the_json_path, 'r') as f:
json_dict = _json.load(f)
return json_dict
except:
raise FileNotFoundError(f'Couldn\'t find json for file: {file}')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment