Skip to content

Instantly share code, notes, and snippets.

@vitaminac
Created February 6, 2021 00:14
Show Gist options
  • Save vitaminac/5637a4f5fbf9e56defe6d5ee46bd947f to your computer and use it in GitHub Desktop.
Save vitaminac/5637a4f5fbf9e56defe6d5ee46bd947f to your computer and use it in GitHub Desktop.
import json
import csv
import re
character = "../personajes/characters.csv"
comic = "../personajes/comics.csv"
relation = "../personajes/charactersToComics.csv"
def sanitize(input: str):
return input.encode('ascii', 'ignore').decode()
def process_comic(comic):
match = re.search(r"\((\d+)\)", comic['title'])
if match:
comic['year'] = match.group(1)
comic['title'] = re.split(r"\(.*?\)", comic['title'])[0].strip()
return comic
if __name__ == "__main__":
characters = None
with open(character, 'r') as f:
characters = [{sanitize(k): sanitize(v) for k, v in row.items()}
for row in csv.DictReader(f, skipinitialspace=True)]
characters = {character['characterID']: character for character in characters}
comics = None
with open(comic, 'r') as f:
comics = [{sanitize(k): sanitize(v) for k, v in row.items()}
for row in csv.DictReader(f, skipinitialspace=True)]
comics = {comic['comicID']: process_comic(comic) for comic in comics}
relations = None
with open(relation, 'r') as f:
relations = [[sanitize(v) for k, v in row.items()]
for row in csv.DictReader(f, skipinitialspace=True)]
for comicRef, characterRef in relations:
if 'characters' not in comics[comicRef]:
comics[comicRef]['characters'] = set()
comics[comicRef]['characters'].add(
characters[characterRef]['name'])
if 'comics' not in characters[characterRef]:
characters[characterRef]['comics'] = list()
characters[characterRef]['comics'].append({
'title': comics[comicRef]['title'],
'issueNumber': comics[comicRef]['issueNumber']
})
comics = list(comics.values())
characters = list(characters.values())
for comic in comics:
if 'characters' in comic:
comic['characters'] = list(comic['characters'])
del comic['comicID']
for character in characters:
character['comics'] = list(character['comics'])
del character['characterID']
with open('../files/JSON/characters.json', 'w') as f:
f.write(json.dumps(characters, indent=4))
with open('../files/JSON/comics.json', 'w') as f:
f.write(json.dumps(comics, indent=4))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment