IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Lire les données d'une page web en python


Sujet :

Python

  1. #41
    Membre actif
    Homme Profil pro
    Aidant
    Inscrit en
    Janvier 2024
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Aidant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2024
    Messages : 55
    Par défaut
    Oui les gars j'ai bien vérifié et en sortie le code me dite que :

    Record_directory ; /home/pi/Donnees_Temperature/février2024
    Record_file : /home/pi/Donnees_Temperature/février2024/février2024.txt

    Donc pas de souci la dessus. Je ne comprends vraiment pas pourquoi le filchier ne se créé pas, je suis totalement bloqué là...

  2. #42
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 321
    Par défaut
    bonjour

    Citation Envoyé par umfred Voir le message
    Tu pourrais faire la création via python, via os.mkdir comme ça tu seras sûr à 100% d'utiliser la bonne graphie.
    Tout a fait, abandonner le cron est la meilleure solution.
    on peut aussi (en plus de "os.") écrire un code de ce type qui va créer l'arborescence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from pathlib import Path
    # ...
    Record_file = "/home/pi/Donnees_Temperature/{current_date}/{current_date}.txt"
    # ...
    Path(Record_file).parent.mkdir(parents=True, exist_ok=True)
     
    # et si on désire créer le fichier dans la foulée ? si il n'existe pas 
    Path(Record_file).touch(exist_ok=True)
    Si le répertoire existe, alors rien n'est fait et pas d'erreur donc pas de "if" à faire. Même chose avec touch()

  3. #43
    Membre actif
    Homme Profil pro
    Aidant
    Inscrit en
    Janvier 2024
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Aidant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2024
    Messages : 55
    Par défaut
    Ton Record_file a créé un dossier et un fichier{currenttime} . J'ai tout de même ajouté ton bout de code, y marche toujours pais toujours pas de fichier créé...

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    import glob
    import urllib.request
    from lxml import etree
    from urllib.error import URLError, HTTPError
    import base64
    import csv
    import os
    import time
    from datetime import datetime
     
     
    sonde_chambre = '/28-00000c86ab42'
    sonde_ecs = '/28-04168632a0ff'
    sonde_salon = '/28-00000c376062'
     
    base_dir = '/sys/bus/w1/devices'
    sonde_chambre = base_dir + '/28-00000c86ab42/w1_slave'
    sonde_salon = base_dir + '/28-00000c376062/w1_slave'
    sonde_ecs = base_dir + '/28-04168632a0ff/w1_slave'
    #Définition de la date sous la forme "MoisAnnee" en français.
    current_datetime = datetime.now()
    current_date = current_datetime.strftime("%B%Y") 
    #print(current_date)
    Mois=['Janvier','février','Mars','Avril','Mai','Juin','Juillet','Aout','Septembre','Octobre','Novembre','Decembre']
    mois = current_datetime.date().month
    #print(Mois[mois])
    Q = Mois[mois-1]
    #print(Q)
    current_date = Q + current_datetime.strftime("%Y") 
    #print(current_date)
    from pathlib import Path
     
    #définition du répertoie de base qui change chaque mois et où les données sont enregistrées
    Record_dir = '/home/pi/Donnees_Temperature/' + current_date
     
    Record_file = Record_dir + f"/{current_date}.txt"
     
    def Ouverture_Lecture_Fichiers_Temp(sonde):
    #    while not os.path.exists("sonde"):
    #        time.sleep(10)    
        f_sonde = open(sonde, 'r')
        lines_sonde = f_sonde.readlines()
        return lines_sonde
        f_sonde.close()
     
    def extraire_temperature (sonde) :
        lines = Ouverture_Lecture_Fichiers_Temp(sonde)
        while lines == []:
            time.sleep(0.5)
    #        print('pas de donnees')
            lines = Ouverture_Lecture_Fichiers_Temp(sonde)
        donnees_temperature = lines[1].split(" ")[9]
        Temp = float(donnees_temperature[2:]) / 1000
        return Temp
     
    def Sauvegarde (Temp1,Temp2,Temp3):
        current_time = current_datetime.strftime("%H:%M:%S")
        fichier_sauvegarde = open("Record_file","a",newline="", encoding="utf-8")
        fichier_sauvegarde.write("%s,%s,%s,%s\n"%(current_datetime.strftime("%d-%m-%Y %H:%M:%S"), Temp1, Temp2, Temp3))
        fichier_sauvegarde.close()
     
    # Vérifier si le fichier existe pour écrire l'en-tête ou non    
    print(Record_dir)
    print(Record_file)
    file_exists = os.path.isfile(Record_file)
    print(file_exists)
    print(current_datetime.strftime("%d-%m-%Y %H:%M:%S"))
     
     
    # ...
    Path(Record_file).parent.mkdir(parents=True, exist_ok=True)
    # et si on désire créer le fichier dans la foulée ? si il n'existe pas 
    Path(Record_file).touch(exist_ok=True)
     
     
    with open("Record_file", 'a', newline="") as Record_file:
        Header = {"Date", "Heure", "temp_Salon", "Temp_Chambre", "Temp_ECS"}
    #    Header.update({element.tag: element.text for element})
     
     
     
     
    Temp_Salon = extraire_temperature (sonde_salon)
    Temp_Chambre = extraire_temperature (sonde_chambre)
    Temp_ECS = extraire_temperature (sonde_ecs)
    print(Temp_Salon,Temp_Chambre,Temp_ECS)
     
    Sauvegarde(Temp_Salon,Temp_Chambre,Temp_ECS)

  4. #44
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Quel est le message d'erreur, si toujours le même, alors c'est toujours le même problème de création de répertoire février2024 (créé par ton bash) au lieu de Fevrier2024 (créé par python) ?

    Sinon pour la création de répertoire, c'est un choix, perso, dans mes tests, j'avais aussi fais le choix de python, le voici avec l'utilisation de makedirs
    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
    import urllib.request
    from lxml import etree
    from urllib.error import URLError, HTTPError
    import base64
    import csv
    import os
    from datetime import datetime
     
    url = "http://192.168.1.78/status.xml"
     
    request = urllib.request.Request(url)
     
    # Ajouter les informations d'authentification
    credentials = ("admin:boiler").encode()
    encoded_credentials = base64.b64encode(credentials)
    request.add_header("Authorization", "Basic " + encoded_credentials.decode())
     
    try:
        with urllib.request.urlopen(request) as response:
            data = response.read()
     
            # Parser le contenu XML
            root = etree.fromstring(data)
     
            # Obtenir la date et l'heure actuelles
            current_datetime = datetime.now()
            current_date = current_datetime.strftime("%Y-%m-%d")
            current_time = current_datetime.strftime("%H:%M:%S")
     
            # Former le chemin du dossier
            folder_name = current_datetime.strftime(
                "%B%Y"
            )  # par exemple "Janvier2024"
            folder_path = os.path.join("/home/pi/Donnees_Chaudiere", folder_name)
     
            # Créer le dossier s'il n'existe pas
            if not os.path.exists(folder_path):
                os.makedirs(folder_path)
     
            # Former le nom du fichier
            csv_file = os.path.join(folder_path, "Données_Chaudiere.txt")
     
            # Préparer les données pour le fichier CSV
            data_to_write = {"Date": current_date, "Heure": current_time}
            data_to_write.update({element.tag: element.text for element in root})
     
            # Vérifier si le fichier existe pour écrire l'en-tête ou non
            file_exists = os.path.isfile(csv_file)
     
            with open(csv_file, "a", newline="", encoding="utf-8") as f:
                writer = csv.DictWriter(f, fieldnames=data_to_write.keys())
     
                # Écrire l'en-tête si le fichier est nouveau
                if not file_exists:
                    writer.writeheader()
     
                # Écrire les données
                writer.writerow(data_to_write)
     
    except HTTPError as e:
        print(f"Erreur HTTP : {e.code} {e.reason}")
     
    except URLError as e:
        print(f"Erreur d'URL : {e.reason}")
     
    except etree.XMLSyntaxError as e:
        print(f"Erreur de syntaxe XML : {e}")
    Du coup je vois pas ce que je peux faire de plus, tu as tout, et plus besoin de ton cron pour créer ton répertoire.

  5. #45
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 321
    Par défaut
    Citation Envoyé par Toine74 Voir le message
    y marche toujours pais toujours pas de fichier créé...
    Normal Ligne 76 !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with open("Record_file", 'a', newline="") as Record_file:
    2 couches dans la même ligne !!

    ------------
    note:
    Citation Envoyé par fred1599 Voir le message
    folder_path = os.path.join("/home/pi/Donnees_Chaudiere", folder_name)
    Amusant : utiliser path.join() ... mais uniquement pour le dernier séparateur

  6. #46
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Amusant : utiliser path.join() ... mais uniquement pour le dernier séparateur
    Tu proposes quoi ? Une construction de chaîne de caractères ? J'ai choisis une construction de chemin de répertoire (path.join)... plus intuitif à mon sens, mais c'est pour tests, on peut/doit évidemment adapter, j'ai juste repris le chemin de base que je connaissais déjà

  7. #47
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 321
    Par défaut
    Citation Envoyé par papajoker Voir le message
    mais uniquement pour le dernier séparateur
    Je voulais dire pourquoi tu ne l'utilises que pour le dernier caractère…

    On doit l'utiliser pour ajout a une racine sinon il n'y a aucun intérêt à utiliser "os.sep" puisque tu passes déjà 2 séparateurs en statique dans le chemin (autant passer le dernier aussi en statique )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # suis pas fan, mais plus conforme : on ne met aucun séparateur
    os.path.join("/", "home", "pi", "données", "fichier.txt")
    # mieux mais pas bon si on doit spécifier un disque
    os.path.join(os.sep, "home", "pi", "données", "fichier.txt")
     
    # avec pathlib si fichier sur même disque dur (win)
    fichier = PurePath(PurePath(__file__).root).parent / PurePath("home") / "pi" / "données" / "fichier.text"
    # peux même forcer un système
    wfichier = PureWindowsPath(fichier)
    note : os.sep, n'est pas doublé en retour de la fonction


    ------------------------
    EDIT

    Citation Envoyé par fred1599 Voir le message
    ça me semble un micro détail
    Nous sommes bien d'accord, j'ai pour cela que j'ai parlé d'amusant

  8. #48
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    J'avais compris ce que tu souhaitais exprimer, c'est pour cela que j'ai ajouté cette phrase,

    on peut/doit évidemment adapter, j'ai juste repris le chemin de base que je connaissais déjà
    c'est donc un copier coller du chemin dans mon développement afin d'éviter ce que tu me proposes justement et prendre le risque de me tromper dans la séparation des répertoires.

    ça me semble un micro détail comparé aux difficultés du PO, non ?

  9. #49
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 526
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 526
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Normal Ligne 76 !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with open("Record_file", 'a', newline="") as Record_file:
    2 couches dans la même ligne !!
    Il persiste dans ces erreurs ...... (oh c'est même pire qu'avant en fait, il a rajouté une erreur)

  10. #50
    Membre actif
    Homme Profil pro
    Aidant
    Inscrit en
    Janvier 2024
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Aidant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2024
    Messages : 55
    Par défaut
    Salut à tous,

    Alors j'ai repris mon script et abandonnée mon ancienne fonction d'enregitrement pour me baser sur la méthode que tu m'as proposé Fred. Cela donne ceci :

    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
    try:
     
     
            #print(data)
            # Parser le contenu XML
            root = [Temp_Salon,Temp_Chambre,Temp_ECS]
            print(root)
            # Obtenir la date et l'heure actuelles
            current_datetime = datetime.now()
    #        current_date = current_datetime.strftime("%Y-%m-%d")
            current_time = current_datetime.strftime("%H:%M:%S")
     
            # Former le nom du fichier en fonction du mois et de l'annee
            Record_file = Record_dir + f"/{current_date}.txt"  
    #        csv_file = fbase_dir + "/{current_date}.txt"  
            print(Record_file)
            # Préparer les données pour le fichier CSV
            current_date = current_datetime.strftime("%d-%m-%Y")
            data_to_write = {"Date": current_date, "Heure": current_time}
            data_to_write.update(root)
            print(data_to_write.update)
            # Vérifier si le fichier existe pour ecrire l'en-tete ou non
            file_exists = os.path.isfile(Record_file)
     
            with open(Record_file, "a", newline="", encoding="utf-8") as f:
                writer = csv.DictWriter(f, fieldnames=data_to_write.keys())
     
                # Écrire l'en-tete si le fichier est nouveau
                if not file_exists:
                    writer.writeheader()
     
                # Écrire les donnees
                writer.writerow(data_to_write)
     
    except HTTPError as e:
        print(f"Erreur HTTP : {e.code} {e.reason}")
     
    except URLError as e:
        print(f"Erreur d'URL : {e.reason}")
     
    except etree.XMLSyntaxError as e:
        print(f"Erreur de syntaxe XML : {e}"
    Et j'obtiens comme erreur :
    Traceback (most recent call last):
    File "/home/pi/Domotique/Enregistrement_Temperature_Salon_Chambre_ECS.py", line 129, in <module>
    data_to_write.update(root)
    TypeError: cannot convert dictionary update sequence element #0 to a sequence

  11. #51
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Mal observé, update attend un dictionnaire, pas une liste

  12. #52
    Membre actif
    Homme Profil pro
    Aidant
    Inscrit en
    Janvier 2024
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Aidant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2024
    Messages : 55
    Par défaut
    J'ai maintenant deux listes de parie clés-valeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    root = {'Temp_Salon': 21.562, 'Temp_Chambre': 22.937, 'Temp_ECS': 45.75}
     
    data_to_write = {'Date': '01-02-2024', 'Heure': '21:48:34'}
    mais si je fais data_to_write_update(root) j'obtiens comme réponse None. Savez-vous pourquoi ?

    Merci

    Antoine

  13. #53
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Testez sur votre interpréteur,

    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
    In [1]: root = {'Temp_Salon': 21.562, 'Temp_Chambre': 22.937, 'Temp_ECS': 45.75}
       ...: 
       ...: data_to_write = {'Date': '01-02-2024', 'Heure': '21:48:34'}
     
     
    In [2]: data_to_write.update(root)
     
     
    In [3]: data_to_write
    Out[3]: 
    {'Date': '01-02-2024',
     'Heure': '21:48:34',
     'Temp_Salon': 21.562,
     'Temp_Chambre': 22.937,
     'Temp_ECS': 45.75}
    update fait bien ce qui est attendu,

    mais c'est sûr que si vous faîte un print sur l'update

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    In [4]: print(data_to_write.update({"test": 1}))
    None
    C'est que vous n'avez pas été lire la documentation sur la méthode update.

  14. #54
    Membre actif
    Homme Profil pro
    Aidant
    Inscrit en
    Janvier 2024
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Aidant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2024
    Messages : 55
    Par défaut
    Mais le programme marche cela étant...

  15. #55
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Normal, puisque l'update a été exécuté à travers le print().

    Et comme vraisemblablement, la méthode update retourne None, une fois terminée, c'est ce même None qui est affiché à travers le print(). Si elle devait retourner True, 1 ou "kamoulox" en fin d'exécution, vous auriez eu True, 1 ou "kamoulox" à l'affichage du print.

  16. #56
    Membre actif
    Homme Profil pro
    Aidant
    Inscrit en
    Janvier 2024
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Aidant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2024
    Messages : 55
    Par défaut
    Bonjour Fred

    Excuse moi de te déranger mais à la suite d'une coupure de courant j'ai perdu tous ce que j'avais fait ces derniers jours....

    J'ai repris le code qu'il y a dans les pages précédentes :
    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
    78
    79
    import urllib.request
    from lxml import etree
    from urllib.error import URLError, HTTPError
    import base64
    import csv
    import os
    from datetime import datetime
    #Definition de la date sous la forme "MoisAnnee" en francais.
    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") 
    print(current_date)
    from pathlib import Path
     
    Record_dir = '/home/pi/Domotique/Donnees_Temperature/' + current_date 
    Record_file = Record_dir + f"/{current_date}.txt"
     
     
     
    url = "http://192.168.1.78/status.xml"
     
    request = urllib.request.Request(url)
     
    # Ajouter les informations d'authentification
    credentials = ("admin:boiler").encode()
    encoded_credentials = base64.b64encode(credentials)
    request.add_header("Authorization", "Basic " + encoded_credentials.decode())
     
    try:
        with urllib.request.urlopen(request) as response:
            data = response.read()
            # Parser le contenu XML
            root = etree.fromstring(data)
     
            #print(data)
            # Parser le contenu XML
            for element in root:
                print(f"{element.tag}: {element.text}")
     
            # Obtenir la date et l'heure actuelles
            current_datetime = datetime.now()
    #        current_date = current_datetime.strftime("%Y-%m-%d")
            current_time = current_datetime.strftime("%H:%M:%S")
     
            # Former le nom du fichier en fonction du mois et de l'annee
            Record_file = Record_dir + f"/{current_date}.txt"  
            print(Record_file)
            # Préparer les donnees pour le fichier CSV
            current_date = current_datetime.strftime("%d-%m-%Y")
            data_to_write = {"Date": current_date, "Heure": current_time}
            data_to_write.update({element.tag: element.text for element in root})
            #print(data_to_write.update)
            # Vérifier si le fichier existe pour ecrire l'en-tete ou non
            file_exists = os.path.isfile(Record_file)
            print(file_exists)
            with open(Record_file, "a", newline="", encoding="utf-8") as f:
                writer = csv.DictWriter(f, fieldnames=data_to_write.keys())
     
                #ecrire l'en-tete si le fichier est nouveau
                if not file_exists:
                    writer.writeheader()
     
                # Écrire les donnees
                writer.writerow(data_to_write)
     
    except HTTPError as e:
        print(f"Erreur HTTP : {e.code} {e.reason}")
     
    except URLError as e:
        print(f"Erreur d'URL : {e.reason}")
     
    except etree.XMLSyntaxError as e:
        print(f"Erreur de syntaxe XML : {e}")
    Mais il me dit :
    Traceback (most recent call last):
    File "/home/pi/Domotique/Programmes/Enregistrement_Data_Chaudiere.py", line 62, in <module>
    with open(Record_file, "a", newline="", encoding="utf-8") as f:
    FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/Domotique/Donnees_Temperature/février2024/février2024.txt'
    Alors que le fichier où doit être enregistrées les données a la bon path (/home/pi/Domotique/Donnees_Temperature/février2024/février2024.txt) mais ne semble pas être créé. Il me semble pourtant que le code est le même...

  17. #57
    Membre actif
    Homme Profil pro
    Aidant
    Inscrit en
    Janvier 2024
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Aidant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2024
    Messages : 55
    Par défaut
    oublie ça, question stupide...

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/06/2019, 13h23
  2. Comment enregistrer les images d'une page web ?
    Par Chris33 dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 11/07/2006, 22h09
  3. [debutant] lister tout les mots d'une page web!
    Par kriskikout dans le forum Web
    Réponses: 20
    Dernier message: 31/05/2006, 22h47
  4. Site qui vérifie les actualisations d'une page web
    Par LFC dans le forum Autres langages pour le Web
    Réponses: 4
    Dernier message: 01/12/2005, 18h47
  5. Lire le contenu d'une page web grâce à un script PHP
    Par BloodyImp dans le forum Langage
    Réponses: 3
    Dernier message: 06/11/2005, 22h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo