Projet

Général

Profil

Transformation du signal racinaire en son (TSRS) » CsvToJson.py

Programme en python permettant de transformer le csv en json, format d'usage d'Ossia-score - Brandon Ruelle, 02/06/2021 09:51

 
import csv

#Notre fichier csv a été obtenu via le code du projet transdi 2019-2020.
#Il est composé de lignes de valeurs espacées d'une ligne vide
#Ses valeurs correspondent aux 8 valeurs des capteurs à chaque unité de temps

#On crée une liste contenant 8 listes avec les valeurs pour chaque capteurs
valeurs = [[],[],[],[],[],[],[],[]]

#Permet d'ouvrir le fichier csv de lecture (r correspond au mode de lecture,
#ici lecture seule)
with open("CSVFILE.CSV",'r') as infile:
lecture = csv.reader(infile) #On définit un objet qui lit notre fichier

#Pour les données que nous utilisons ici, nous réduissons le nombre de points trop nombreux
#pour être lu par Ossia Score. On en prend 1 sur 1000.
compteur=0;

for row in lecture: #On boucle sur chaque ligne du fichier
if row: #Agit seulement sur la ligne n'est pas vide
if compteur%50==0:
for i in range(8):
valeurs[i].append(row[i])
compteur=compteur+1

#Il faut traduire les valeurs en les remettant sur une échelle de 0 à 1 pour
#qu'elles soient compatibles avec Ossia Score :
for i in range(len(valeurs)):
for j in range(len(valeurs[i])):
valeurs[i][j] = float(valeurs[i][j])
valeurs[i][j] = valeurs[i][j] + 8398930 #on remet tout en positif
valeurs[i][j] = valeurs[i][j] / 16777216 #On met sur une échelle de 0 à 1
valeurs[i][j] = str(valeurs[i][j])

#On récupère le script du fichier JSON
with open("scriptsignaux.json",'r') as infile:
script = infile.readlines()

#Maintenant qu'on a nos données dans une liste, on écrit les fichiers JSON :
for i in range(8):
with open(f"capteur{i}.layer",'w') as outfile: #On écrit un nouveau fichier (w = écriture seule) pour chaque capteur
for j in range(48): #Les 48 premières lignes du script sont les mêmes pour tous les fichiers
outfile.write(script[j]) #lire les lignes du fichier JSON et les copier dans le fichier

#Insertion des valeurs : on commence par calculer l'échantillonnage (nb
#de points)
ech = 1 / (len(valeurs[i]) - 1)

#Dernière valeur:
outfile.write('{\n"uuid": "1e7cb83f-4e47-4b14-814d-2242a9c75991",\n"ObjectName": "CurveSegmentModel",')
outfile.write(f'"id": {len(valeurs[i])-2},')
outfile.write(f'"Previous": {len(valeurs[i])-3},')
outfile.write('"Following": null,')
outfile.write(f'"Start": [ {ech*(len(valeurs[i])-2)}, {valeurs[i][len(valeurs[i])-2]} ],')
outfile.write(f'"End": [ 1.0, {valeurs[i][len(valeurs[i])-1]} ],')
outfile.write('"Power": 1.0\n},')

for j in range(len(valeurs[i]) - 3, 0, -1):
outfile.write('{\n"uuid": "1e7cb83f-4e47-4b14-814d-2242a9c75991",\n"ObjectName": "CurveSegmentModel",')
outfile.write(f'"id": {j},')
outfile.write(f'"Previous": {j-1},')
outfile.write(f'"Following": {j+1},')
outfile.write(f'"Start": [ {ech*(j)}, {valeurs[i][j-1]} ],')
outfile.write(f'"End": [ {ech*(j+1)}, {valeurs[i][j]} ],')
outfile.write('"Power": 1.0\n},')

#Première valeur:
outfile.write('{\n"uuid": "1e7cb83f-4e47-4b14-814d-2242a9c75991",\n"ObjectName": "CurveSegmentModel",')
outfile.write('"id": 0,')
outfile.write('"Previous": null,')
outfile.write('"Following": 1,')
outfile.write('"Start": [ 0.0, 0.0 ],')
outfile.write(f'"End": [ {ech*1}, {valeurs[i][0]} ],')
outfile.write('"Power": 1.0\n}')

for j in range(34): #les lignes 69 à 102 sont les même pour tous les fichiers
outfile.write(script[68 + j])
(20-20/22)