103 lines
3.8 KiB
Python
Executable File
103 lines
3.8 KiB
Python
Executable File
# 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)
|