Lecture d'un fichier texte avec lettres accentuées

Messages postés
55
Date d'inscription
lundi 30 décembre 2013
Statut
Membre
Dernière intervention
2 août 2019
- - Dernière réponse :  Python371 - 5 août 2019 à 16:44
Bonjour,
Je fais mes premiers pas avec Python et Pyscripter et bute sur un problème d'accents que je ne sais pas résoudre tant les fils Internet sur le sujet sont nombreux et déroutants.
J'ai créé avec Notepad++ un fichier csv, 4 champs séparés par des virgules que je lis avec le script suivant :

Fichier Notepad au format csv :
XXXXXX,Pierre,1947,août,7
YYYYYYY,Bernadette,1948,novembre,5
XXXXXXYYYYYYYY,Florence,1979,novembre,26
ZZZZZZZ,Andrée,1927,janvier,09

Script Python dans Pyscripter :

#
import csv
fic=open('Fichier-00-csv-1.csv')
fic_donnees=csv.reader(fic)
nom=[]
for ligne in fic_donnees:
    print(ligne)
    c1=ligne[0]
    nom.append(c1)

print(nom)

wnom='Andrée'
print(wnom)

J'utilise pour apprendre Python les vidéos que je glane sur Internet, les plus utiles étant Python au Lycée d'Arnaud Bodin.

Quand ce script est lancé, j'obtient dans la console :
['YYYYYYY', 'Bernadette', '1948', 'novembre', '5']
['XXXXXXYYYYYYYY', 'Florence', '1979', 'novembre', '26']
['ZZZZZZZ', 'Andrée', '1927', 'janvier', '09']
['XXXXXX', 'YYYYYYY', 'XXXXXXYYYYYYYY', 'ZZZZZZZ']
Andrée
>>>
Ce script fonctionne correctement quand j'utilise une variable contenant une lettre accentuée (wnom='Andrée') mais ne reconnaît par l'accent quand il est dans le fichier lu par la méthode .reader .
Ma question : comment faire pour trouver le bon codage du fichier lu et comment le signaler au script Python si c'est nécessaire?
Merci d'avance pour l'aide apportée, je ne suis pas du tout "geek", juste un apprenti pour faire des choses simples et réutilisables avec des élèves de lycée lors d'exercices d'algorithmique.
Pierre

Configuration: Windows 10 à jour, Logiciels libres Open Office, MikTex, Chrome, Python 3.6, PyScripter et quelques outils basiques.

Afficher la suite 

3 réponses

Messages postés
13621
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 août 2019
374
0
Merci
Bonjour
Je ne code pas en python mais ton problème est typique du problème « d’encoding ».
J’ai trouvé un article qui explique bien et te donne des solutions
http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/

Par rapport au tuto vidéo, c’est la mode, mais la mode c’est pas forcément bien. La vidéo apporte un vrai plus pour apprendre à changer une roue, passer correctement le fil dans la machine à coudre, faire un beau point de croix. Mais pour coder c’est pas le pied. Je ne connais pas les vidéos dont tu parles, mais dans la majorité, tu attends 10 minutes que l’auteur tape 3 lignes de codes (que tu aurais lues en 10 secondes) en bafouillant, se trompe se reprennent, compile lance le script, à zut ça plante, etc... et quand ça marche il faut faire une pause pour réécrire le code de ton côté.
Avec un tuto écrit, normalement le code est fonctionnel, le texte a été relu, il est clair. Et surtout tu peux copier coller le code.
Et même un bon vieux livre est plus adapté que la vidéo.

Je te conseille developper.com tous leur cours sont de qualité, en second openclassroom, mais je connais des exemples où les codes présentés ne fonctionnaient (je ne sais pas si c’est le cas des cours de python)
pzorba75
Messages postés
55
Date d'inscription
lundi 30 décembre 2013
Statut
Membre
Dernière intervention
2 août 2019
-
J'ai déjà vu ce document et je n'ai pas vraiment trouvé comment régler un problème qui me semble simple, les commentaires et réponses partent un peu dans toutes les directions avec les différences entre les versions Python 2 et Python 3 qui rendent tout difficile à comprendre.
Pour mon cas : Je pense que le fichier en entrée est en UTF8,d'après l'encoding affiché par Notepad++ et que Pyscripter gère le script en UTF8 par défaut, si bien que tout devrait marcher, et ce n'est pas le cas.
Je reste bloqué.
Commenter la réponse de Whismeril
Messages postés
13621
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 août 2019
374
0
Merci
As tu essayé de mettre
# coding: utf8
tout en haut du fichier?
pzorba75
Messages postés
55
Date d'inscription
lundi 30 décembre 2013
Statut
Membre
Dernière intervention
2 août 2019
-
Je l'avais mis, cela concerne le fichier source .py en cours de développement.
Commenter la réponse de Whismeril
Messages postés
13621
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 août 2019
374
0
Merci
Au temps pour moi, c’est à ton lecteur de csv qu’il faut dire que le fichier texte est en utf 8
https://stackoverflow.com/questions/904041/reading-a-utf8-csv-file-with-python
tu ajoute au début du fichier :
# -*- coding: utf-8 -*-
Commenter la réponse de Whismeril