#!/usr/bin/python3 """ exportation de données iSpindel JSON vers données applaties CSV """ import csv import json import pathlib class Frame(object): """un cadre de données""" def __init__(self,fname): """constructeur""" with open(fname,'r') as f: self._json = json.load(f) self.names = tuple(self._names()) self.keys = tuple(self._keys()) self.rows = tuple(self._rows()) def _names(self): """génère une liste de noms""" for group in self._json: yield group["name"] def _keys(self): """génère un liste de clés""" for i in self._json[0]["data"]: yield i["x"] def _rows(self): """génère les lignes d'un tableau""" def row(key): """génère une ligne d'un tableau""" for name in self.names: yield self.get(name,key) for k in self.keys: yield tuple(row(k)) def get(self,name,key): """récupère la valeur d'une entrée d'après son nom et sa clé""" for group in self._json: if group["name"] == name: for value in group["data"]: if value.get("x") == key: return value.get("y") if __name__ == "__main__": here = pathlib.Path.cwd() docs = tuple(here.rglob("*.json")) if len(docs) == 0: print("Aucun fichier JSON ('.json') trouvé.") for doc_i in docs: frame = None if doc_i.exists() and doc_i.stat().st_size > 0: frame = Frame(doc_i) doc_o = doc_i.with_suffix(".csv") with open(doc_o,'w', newline='') as f: writer = csv.writer(f,dialect='unix') writer.writerow(frame.names) writer.writerows(frame.rows) print(f"INFO: {doc_i.name} >> {doc_o.name}")