Skip to content

Instantly share code, notes, and snippets.

@ettorerizza
Last active November 10, 2018 13:47
Show Gist options
  • Save ettorerizza/20e02df929551717d4f34effd5e49a61 to your computer and use it in GitHub Desktop.
Save ettorerizza/20e02df929551717d4f34effd5e49a61 to your computer and use it in GitHub Desktop.
Tropy JsonLD to CSV
import json
import csv
import sys
# parseur Python pour les fichiers jsonLD de Tropy
# Renvoie le fichier avec son nom d'origine, mais en CSV.
# à utiliser en lignes de commande.
# exemple d'usage avec un fichier Json de Tropy nommé resultats.json :
#> python tropy_parser.py resultats.json
def flatten_json(y):
out = {}
def flatten(x, name=''):
if type(x) is dict:
for a in x:
if a != "tag":
flatten(x[a], name + a + '_')
else:
out[a] = ",".join(x[a])
elif type(x) is list:
for a in x:
if a != "tag":
flatten(a, name)
else:
out[a] = ",".join(x[a])
else:
out[name[:-1]] = x
flatten(y)
return out
if __name__ == '__main__':
filename = sys.argv[1]
with open(filename, "r", encoding="utf8") as f:
data = json.load(f)
result = []
for el in data:
result.append(flatten_json(el['@graph']))
all_fields = []
for x in result:
for y in x.keys():
all_fields.append(y)
if "\\" in filename:
outputfile = filename.split("\\")[-1].split(".")[-2] + ".csv"
else:
outputfile = filename.split(".")[-2] + ".csv"
with open(outputfile, "w") as output_file:
writer = csv.DictWriter(output_file, all_fields)
writer.writeheader()
writer.writerows(result)
@ettorerizza
Copy link
Author

ettorerizza commented Nov 10, 2018

Autre solution : les projets Tropy sont stockés sous la forme de fichiers *.tpy, qui est en réalité une base de données SQLite. En effectuant un clic droit sur le nom d'un projet dans Tropy, on peut retrouver l'endroit où ce fichier est stocké (dans Windows, par défaut, il est enregistré dans le dossier "Documents"). Il "suffit" alors d'ouvrir le fichier *.tpy avec un logiciel tel que DBbrowser for SQLite et d'effectuer une requête SQL sur les tables qui nous intéressent. L'écriture de la requête sera plus complexe que l'utilisation de ce script Python, mais elle permettra d'obtenir des informations plus fines et reservira souvent.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment