#!/usr/bin/env python3 # X1BI030, CCTP 2, sujet A, 2022/2023 # Frédéric Goualard # Dernière modification: 2022-11-23/09:26:02/+0100 import sys import json if len(sys.argv) != 4: print(f"{sys.argv[0]} ", file=sys.stderr) exit(1) # On utilise un dictionnaire pour déterminer de façon efficace si le 3e paramètre # est bien un nom de jour ET trouver la valeur numérique associée. jours = {'lundi':"1",'mardi':"2",'mercredi':"3",'jeudi':"4", 'vendredi':"5",'samedi':"6",'dimanche':"7"} numloop = sys.argv[2] # On change la casse du jour pour pouvoir comparer facilement avec les index # de notre dictionnaire sans se soucier de la forme utilisée lors du passage # du paramètre. j = sys.argv[3].lower() if j not in jours: print(f"{sys.argv[0]}: {jour} n'est pas un jour de la semaine.",file=sys.stderr) exit(2) numjour = jours[j] try: with open(sys.argv[1]) as jsonfile: data = json.load(jsonfile) except IOError: print(f"{sys.argv[0]}: impossible d'ouvrir le fichier {sys.argv[1]}.", file=sys.stderr) exit(3) # On va récupérer toutes les entrées correspondant à la boucle et au jour cherchés. # On utilise un dictionnaire où l'index indique l'heure de comptage et la valeur est # la somme des comptages pour cette heure accumulée au fil de la lecture des entrées. # Initialisation des entrées de comptage pour chaque heure comptage = dict() for i in range(24): comptage[f"{i:02d}"] = 0 # Nombre d'enregistrements considérés ndata = 0 for entrée in data: champs=entrée["fields"] if champs["boucle_num"] == numloop and champs["jour_de_la_semaine"] == numjour: ndata += 1 for i in range(24): try: comptage[f"{i:02d}"] += champs[f"{i:02d}"] except KeyError: pass # On considère que la donnée manquante était un `0` if ndata != 0: # Calcul des moyennes for i in range(24): comptage[f"{i:02d}"] //= ndata # Affichage des résultats sur la sortie standard for i in range(24): print(comptage[f"{i:02d}"],end=" ") print() else: exit(4)