X-Git-Url: https://git.immae.eu/?p=perso%2FDenise%2Foms.git;a=blobdiff_plain;f=gestion_donnees.py;h=a2d0a1e2b819431a83391243e9764a62613dd7ff;hp=2ba945df04aed47c62d15bda6d4c6c33362b2825;hb=be2bf5155489b103e616845ffedb1a58c3808c48;hpb=5679dfd03c9761283e3a36d6d09798aaa334e1e9 diff --git a/gestion_donnees.py b/gestion_donnees.py index 2ba945d..a2d0a1e 100644 --- a/gestion_donnees.py +++ b/gestion_donnees.py @@ -4,13 +4,15 @@ from configuration import * from gestion_erreurs import * import datetime +import json +import unidecode ############ Fonctions de conversion def convertit_jours_vers_python(chaine,liste_err): """ convertit une chaine de type 1a 3m 1s 10j en jours - Renvoie un nombre de jours en entiers. + Renvoie un nombre de jours en float Si un des caractères n'est ni un nombre, ni une lettre "autorisée" ni une espace, on affiche un warning et on ignore ce caractère """ @@ -41,19 +43,19 @@ def convertit_jours_vers_python(chaine,liste_err): warning("convertit_jour_vers_python : caractère invalide : "+lettre,liste_err) # à la fin s'il reste qqch on le garde dans les jours if chainenombre != "": - agejour += int(chainenombre) + agejours += int(chainenombre) if agejours<0: warning("L'âge est négatif !",liste_err) agejours = 0 - return round(agejours) + return agejours def convertit_age_vers_texte(nombre): """ convertit un nombre de jours en un truc plus lisible en mois, années, jours et renvoie une chaîne sous la forme 3a2m1j par exemple""" annees = int(nombre / jours_dans_annee) - restant = nombre - int(annees*jours_dans_annee) + restant = nombre - annees*jours_dans_annee mois = int(restant/jours_dans_mois) - jours= restant - int(mois*jours_dans_mois) + jours= round(nombre - mois*jours_dans_mois - annees*jours_dans_annee) chaine = "" if annees >0: @@ -64,6 +66,18 @@ def convertit_age_vers_texte(nombre): chaine += str(jours)+"j" return chaine ########################## + + +def simplifie_nom(chaine): + """ simplifie le nom chaine afin d'en faire une extension + pour le nom du fichier. Met tout en minuscules et vire les caractères spéciaux + et max 15 caractères""" + chaine2 = "" + for l in chaine: + if l.isalpha(): + chaine2+=l + chaine2 = unidecode.unidecode(chaine2) + return chaine2[:15] def convertit_poids_vers_python(chaine,liste_err): """ convertit une chaine vers un float qui est le poids. @@ -73,18 +87,18 @@ def convertit_poids_vers_python(chaine,liste_err): chaine2 = chaine2.replace(" ","") try: - poids = float(chaine) + poids = float(chaine2) except: warning("Poids impossible à lire : "+chaine,liste_err) poids = 0 - if not( 0",liste_err) +# +# #le nb max du formulaire +# valform["nb_data"] = max(indice_formulaire +2,nombre_lignes_form) +# +# return valform -def fichier_texte_vers_configdonnees(fichier,liste_err): - """ prend le texte importé et l'exporte vers configuration et données - sous forme de valeurs du formulaire """ +def fichier_json_vers_configdonnees(fichier,liste_err): + """ prend le json importé et l'exporte vers les valeurs du formulaire """ + chaine = fichier.read() + valform = json.loads(chaine) + # Il faut maintenant récupérer les l_jours et l_poids puis les remettre + # sous forme de age_i et poids_i + l_jours= valform.get("data_j",[]) + l_poids=valform.get("data_p",[]) + if len(l_poids) != len(l_jours): + warning("Lecture du json : les données sont incohérentes (listes de taille différentes et/ou pb de lecture") + long = min(len(l_jours),len(l_poids)) + else: + long = len(l_jours) + for i in range(long): + valform["age_"+str(i)] = l_jours[i] + valform["poids_"+str(i)] = l_poids[i] + + valform["nb_data"] = max(long +2,nombre_lignes_form) - valform = {} - indice_formulaire = 0 # l'indice du formulaire pour les données : age_1, date_1, poids_1 etc - num_ligne = 0 - lignes = fichier.readlines() - for ligne in lignes: - num_ligne +=1 - ligne = str(ligne,"utf8") - ligne = ligne.rstrip("\n") - if ligne != "" and ligne[0] != "#" and not(ligne.isspace()): # les lignes commençant par # sont des commentaires - # On essaie de partitionner pour voir - (var,egal,val) = ligne.partition("=") - if egal == "=": # c'est une ligne de config - valform[var] = val - else: - (age,virgule,poids) = ligne.partition(",") # On partitionne avec , - if virgule == ",": - # c'est une ligne de data - valform["age_"+str(indice_formulaire)] = age - valform["poids_"+str(indice_formulaire)] = poids - indice_formulaire +=1 - - else: - warning("La ligne "+str(num_ligne)+" n'est pas reconnue et sera ignorée : <"+ligne+">",liste_err) + return valform - #le nb max du formulaire - valform["nb_data"] = indice_formulaire +2 - return valform \ No newline at end of file + \ No newline at end of file