Python problème d'encodage? [ résolu]

Tags: #<Tag:0x00007f63f542a350>

Bonjour,
Je récupère un fichier .csv. Il provient d’un poste windows qui inetrroge une base de donnée oracle, installée sur un serveur Centos. Je récupère les lignes avec une instruction split(), sur mon poste Debian stable. Le fichier résultant est bien lisible par cat, mais si je l’édite avec vim ou gedit j’obtiens des caractères spéciaux en plus.
le fichier csv fait 19000 lignes.
j’en colle deux ici pour exemple:
��PRENOM NOM DESIGNATION CODECIP COUNT(CODECIP) QTEFACTUREE OUVERT ANNEE
Desfeux PHARMACIE VAXIGRIP Susp inj ser pr�r Ser/0,5ml 3400932129904 242 225 1 2017

le script python que j’utilise:

#/usr/bin/python
2 #-coding utf8-
3 import sys
4 gv = open(“presc.gv”,“w”)
5 gv.write(“digraph G {”)
6 gv.close()
7 fic = open (“prescripteurDeMedocs.csv”,“r”)
8 list = fic.readlines()
9 for p in list[1:10]:
10 pp = p.split("\t")
11 if len(pp)>2:
12 gv = open(“presc.gv”,“a”)
13 enc = sys.getfilesystemencoding()
14 print enc
15 st = pp[0].decode(‘iso-8859-1’)### j’essaie de jouer avec les encodages
16 st =st.encode(‘utf-8’)
17 #gv.write( pp[0]+pp[1]+"->"+pp[3]+"[label = “”+pp[2]+""];\n")
18 #pt= st+pp[1]+"->"+pp[3]+"[label = “”+pp[2]+""];\n"
19 pt = “%s %s -> %s [label=”%s"]\n" % (pp[0],pp[1],pp[3],pp[2])
20 print pt
21 gv.write(str(pt))
22 gv.close()
23 gv=open(“presc.gv”,“a”)
24 gv.write("}\n")
25 gv.close()

fichier de sortie sous vim:

digraph G {^@D^@e^@s^@f^@e^@u^@x^
etc…
Bizarre chaque caractère issu du fichier .csv précédé ^@?
J’ai testé mon script avec un autre csv et ça marche impec. Donc je penche pour un problème d’encodage, mais je n’ai pas la main sur le programme qui produit le csv.
Si quelqu’un a une idée, merci.
Merci

Je me réponds à moi-même. Si cela peut aider certains.
La difficulté de ce genre de problème étant de déterminer le type d’encodage, m’est venue une idée toute simple. Je tente d’ouvrir le .csv dans libreoffice, qui annonce d’emblée que le fichier est en utf-16. Ensuite, un simple “iconv”, et tout marche sans problème.
Sans doute pas universelle, la méthode peut rendre des services?
Cordialement.

1 J'aime

salut
j’ai l’impression que la 2ème ligne n’a pas la bonne syntawe
je crois que c’est
# -*- coding: utf-8 -*-

et puis pour ce genre de boulot j’aime bien la classe re https://docs.python.org/2/library/re.html