Created
February 6, 2021 00:14
-
-
Save vitaminac/5637a4f5fbf9e56defe6d5ee46bd947f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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