1 pièce(s) jointe(s)
Problème à l'ouverture d'un fichier de données créé par un script python
Bonjour à tous,
Il y a de cela quelques semaines j'ai pu grâce à votre aide créer un script qui enregistre les données recueillies sur la page web de ma chaudière pour les enregistrer sur un fichier de données pour utilisation future. Un fichier est crée par mois, dans un dossier correspondant.
J'ai créé sur le même modèle un script qui enregistre les températures des pièces de ma maison et un autre qui enregistre des données météo.
Les scripts tournent en continu depuis début février via des scripts dans systemd de mon raspberry pi.
Et aujourd'hui, quand j'ai voulu ouvrir un des fichiers de données dans l'éditeur de texte de mon raspberry j'obtiens une fenêtre d'erreur me disant que le document n'est pas en utf-8 valide (séquence d'octets invalide en début de conversion).
J'ai par le passé déjà ouvert ces différents fichiers de données plein de fois et cela n'a jamais posé le moindre problème. Plus aucun ne s'ouvre maintenant.
Par contre si je les transfère sur mon ordinateur windows via WinSCP il s'ouvre tout seul dans l'éditeur de texte, avec codage utf-8....
Voilà le code en question :
Code:
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
import time
from datetime import datetime
from pathlib import Path
while True :
#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=['janvier','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)
Record_dir = '/home/pi/Domotique/Donnees_Chaudiere/' + 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)
# 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)
f.close()
time.sleep(3)
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 le fichier de données :
Pièce jointe 652761
Savez-vous ce qui a pu changer ? Je n'ai pas touché au code depuis février et je n'ai pas non plus apporté de changements à mon raspberry.
Merci d'avance pour votre aide !