1 pièce(s) jointe(s)
UnicodeDecodeError avec CGI
Bonjour à tous,
J'ai un projet dont le but est d'importer un planning (fichier csv au format .txt) dans une base de données.
J'ai donc réalisé un script qui modifie le fichier, car il est par défaut en utf-16 et des informations inutiles peuvent êtres enlevées. Ce script fonctionne à merveille sur Windows ou même Linux (Raspbian ou Ubuntu) mais lorsque que j'execute via CGI j'ai l'erreur "UnicodeDecodeError".
Pièce jointe 357224
Le script py est hébergé sur ma Raspberry Pi 3, et un serveur Apache2 est utilisé.
J'ai changé l'endroit où était situé le planning pour éviter les problèmes de droit de Linux mais rien ne change.
Lors de l’exécution du code, les fichiers sont créés comme prévu mais le fichier final (qui doit contenir le planning modifié) est vide alors que les fichiers temporaires eux sont remplis.
Comment faire pour contourner ce problème ?
Voici le script "delete.py" :
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
|
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cgi
import cgitb
import os
import datetime
import codecs
import csv
import sys
cgitb.enable()
cgi.test()
repertoire = "/home/pi/Documents/GebPlannings/"
fichier_txt = repertoire + "planning" + str(datetime.date.today().year) + "tmp.csv"
fichier_temporaire = repertoire + "Classeur1.csv"
fichier_temporaire2 = repertoire + "Classeur2.csv"
fichier_csv = repertoire + "planning" + str(datetime.date.today().year) + ".csv"
with codecs.open(fichier_txt, "r", "utf-16") as fichierSource:
with codecs.open(fichier_temporaire, "w", "utf-8") as fichierCible:
while True:
contenu = fichierSource.read()
if not contenu:
break
fichierCible.write(contenu)
fichierSource.close()
fichierCible.close()
with open(fichier_temporaire, "rb") as fichierTemporaire1:
with open(fichier_temporaire2, "wb") as fichierTemporaire2:
row = 1
for ligne in fichierTemporaire1:
if row > 1:
fichierTemporaire2.write(ligne)
row += 1
fichierTemporaire1.close()
fichierTemporaire2.close()
with open(fichier_temporaire2, "r") as source:
lecteur = csv.reader(source, delimiter = '\t')
with open(fichier_csv, "w") as result:
ecriture = csv.writer(result, delimiter = ';')
for col in lecteur:
ecriture.writerow((col[0], col[1].replace('h', ':'), col[3], col[4], col[5], col[6].replace('h', ':')))
#ecriture.writerow((col[0], col[1].replace('h', ':'), col[3], col[4], col[5], col[6].replace('h', ':')))
lecteur.close()
ecriture.close() |
Le planning ressemble à ça :
Code:
1 2 3 4 5 6 7 8
|
NUMERO DUREE FREQUENCE SALLE ALTERNANCE JOUR H.DEBUT EFFECTIF
1 2h00 H 1 H lundi 08h00 16
2 2h00 H 2 H lundi 08h00 36
3 2h00 H 3 H lundi 08h00 26
4 2h00 H 4 H lundi 08h00 31
5 2h00 H 5 (tbi) H lundi 08h00 31
6 1h00 Q2 6 Q2 lundi 08h00 30 |