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".
Nom : Sans titre.png
Affichages : 365
Taille : 58,0 Ko
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 : 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
 
#!/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 : Sélectionner tout - Visualiser dans une fenêtre à part
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