# met à jour un fichier de suivi pour chaque livre # le suivi se fait dans un fichier csv où chaque ligne est un compte rendu de statistiques du livre # colonnes du csv: date; mots; intrigues; personnages; personnages_mots; import csv from datetime import date, timedelta, datetime def mise_a_jour_suivi(fichier_csv, fichier_livre, fichier_personnages): # Lire le fichier livre.org with open(fichier_livre, 'r') as f: contenu_livre = f.read() mots_livre = len(contenu_livre.split()) chapitres = contenu_livre.count('* ') sous_chapitres = contenu_livre.count('** ') + contenu_livre.count('*** ') + contenu_livre.count('**** ') # Lire le fichier personnages.org with open(fichier_personnages, 'r') as f: contenu_personnages = f.read() personnages_mots = len(contenu_personnages.split()) personnages = contenu_personnages.count('* ') # Récupérer les valeurs pour les autres colonnes intrigues = 5 # Mettre à jour le fichier de suivi with open(fichier_csv, 'a', newline='') as csvfile: writer = csv.writer(csvfile, delimiter=';') now = datetime.now() ligne = [now.isoformat(), mots_livre, intrigues, personnages, personnages_mots, chapitres, sous_chapitres] writer.writerow(ligne) # Exemple d'utilisation fichier_csv ='suivi_livre.csv' fichier_livre = 'livre.org' fichier_personnages = 'personnages.org' def analyse_csv(fichier_csv): with open(fichier_csv, 'r') as csvfile: reader = csv.reader(csvfile, delimiter=';') donnees = list(reader) # Récupérer les dates et les nombres de mots dates = [datetime.fromisoformat(donnee[0]).date() for donnee in donnees] mots = [int(donnee[1]) for donnee in donnees] # Récupérer la date du jour aujourd_hui = date.today() oldest_count=0 hier = aujourd_hui - timedelta(days=1) semaine_derniere = aujourd_hui - timedelta(days=7) mois_dernier = date(aujourd_hui.year, aujourd_hui.month - 1, aujourd_hui.day) # Récupérer la valeur des mots la plus récente parmi celles de la date du jour mots_aujourd_hui = 0 mots_aujourd_hui_start = 0 most_recent = 0 # print("suivis: ",len(dates)) most_recent = mots[len(dates)-1] for i, date_ in enumerate(dates): # trouver le premier décompte supérieur à 0 if mots[i] > 0 and oldest_count == 0: oldest_count = mots[i] # print('oldest: ',oldest_count, " mots") if date_ == aujourd_hui: if mots_aujourd_hui_start == 0: mots_aujourd_hui_start = mots[i] print('au début du jour:' , mots_aujourd_hui_start) if date_ == aujourd_hui: mots_aujourd_hui = mots[i] # Récupérer la valeur des mots la plus récente du jour précédent mots_hier = 0 for i, date_ in enumerate(dates): if date_ == hier: mots_hier = mots[i] break # Récupérer la valeur des mots la plus récente de la semaine dernière mots_semaine_derniere = 0 for i, date_ in enumerate(dates): if semaine_derniere <= date_ < aujourd_hui: mots_semaine_derniere = mots[i] break # Compter le nombre de mots changés aujourd'hui mots_changés_aujourd_hui = most_recent - mots_aujourd_hui_start # Compter le nombre de mots changés depuis la date la plus récente dans la semaine dernière mots_changés_semaine_derniere = mots_aujourd_hui_start - mots_semaine_derniere # Afficher le résultat print("Nombres de mots changés aujourd'hui : ", mots_changés_aujourd_hui) print("Nombres de mots changés depuis la date la plus récente dans la semaine dernière : ", mots_changés_semaine_derniere) print("Total : ", most_recent," mots") mise_a_jour_suivi(fichier_csv, fichier_livre, fichier_personnages) analyse_csv(fichier_csv)