Bonjour à tous,

J'ai un pb avec un script qui doit aller sélectionner une partie d'un fichier de données en vue d'en faire un graph. J'ai un fichier de données du genre : Date, Température_Salon, Température_Chambre, Température_ECS.

Ce fichier est abondé par des mesures faites sur des sondes de température qui viennent toutes les 3s environ rajouter une ligne.

Mon script lit d'abord le fichier pour en déterminer le nombre de ligne. Puis il lit la dernière ligne pour savoir quel jour du mois on est (je fait ça car je veux récupérer les dernières 24H de données pour en faire un graph).
Ensuite je lis le fichier ligne par ligne en comparant le jour avec le jour trouvé sur la dernière ligne. C'est là que cela bugue car la lecture ne s'arrête pas au début du dernier jour enregistré, ça lit tout le fichier malgré la consigne...

Voila le script :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import glob
import urllib.request
from lxml import etree
from urllib.error import URLError, HTTPError
import base64
import csv
import sys
import os
import time
from datetime import datetime
from pathlib import Path
import smbus as smbus
#import file_read_backwards
 
current_datetime = datetime.now()
current_date = current_datetime.strftime("%B%Y") 
    #print(current_date)
Mois=['Jjanvier','février','mars','avril','mai','juin','juillet','aout','septembre','octobre','novembre','décembre']
mois = current_datetime.date().month
    #print(Mois[mois])
Q = Mois[mois-1]
    #print(Q)
current_date = Q + current_datetime.strftime("%Y")
Record_dir = '/home/pi/Domotique/Donnees_Temperature/' + current_date
Record_file = Record_dir + f"/{current_date}.txt"
Day_File_Salon = Record_dir + f"/Data_Temp_Day_Salon.txt"
Day_File_Chambre = Record_dir + f"/Data_Temp_Day_Chambre.txt"
Day_File_ECS = Record_dir + f"/Data_Temp_Day_ECS.txt"
 
print(Day_File_Salon)
Date = 0
Heure = 1
Salon = 2
Chambre = 3
ECS = 4
 
def Selection_Data_Plot(Data_File,Piece,Day_File):
#Calcul du nombre de lignes dans le fichier
    with open(Data_File, 'r')as f_plot :
        total_lines = sum(1 for line in f_plot)
#        print(total_lines)
# Calcul du dernier jour présent dans le fichier
    with open(Data_File, 'r')as f_plot : 
        i = 0
        lines_plot = f_plot.readlines()[-1]
        Jour_Courant = lines_plot.split(",")[0].split("-")[0]
#        print(int(Jour_Courant))
#        print(lines_plot.split(",")[0].split("-")[0])
#Je parcours le fichier avec un itérateur pour trouver la ligne où le dernier jour commence
    with open(Data_File, 'r')as f_plot :
        lines_plot = f_plot.readlines()[1:]
#        print(lines_plot[1])
        Jour = int(lines_plot[1].split(",")[0].split("-")[0])
#        print(Jour)
        while int(Jour) < int(Jour_Courant):
            for line in lines_plot:
#                print(int(Jour_Courant))
                Jour = line.split(",")[0].split("-")[0]
#                print(Jour)
                i = i + 1
                line = f_plot.readline()
                print(i)
#Enregistrement des donnees
    with open(Data_File, 'r')as f_plot :
        lines_plot = f_plot.readlines()[i:total_lines]
        print(i)
        print(total_lines)
        for line in lines_plot:
            Date = line.split(",")[0:1]
            Temp_Salon = float(line.split(",")[Piece])
            with open(Day_File, "a", newline="", encoding="utf-8") as f:
                data_to_write = {Date, Temp_Salon}
                print(data_to_write)
                f.write(data_to_write)
                f.close()
                print(i)
data_plot_Salon = Selection_Data_Plot(Record_file,Salon,Day_File_Salon)
Je vous mets en pièce jointe le fichier de données de température du mois en cours pour que vous puissiez tester le code.
J'ai un peu du mal à comprendre pourquoi il ne sélectionne pas les données demandées, pouvez-vous m'aider ?

Merci par avance à tous.

février2024.odt