IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème python encodage


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Octobre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2019
    Messages : 3
    Par défaut Problème python encodage
    Bonjour, j'ai un problème dans mon code je cherce a résoudre ce bug mais j'y arrive pas.
    Cette erreur survient seulement quand je modifie la liste
    Erreur :
    UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 21: character maps to <undefined>
    Et le code :

    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
    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 sys
    import fileinput
     
     
    def modifier():
        print("Quelle ligne voulez vous modifier ?")
        linea = input("> ")
        print("Nouveau nom de la tache ?")
        taskname = input("> ")
        print("La tache est elle finie : (y/n) ")
        done = str(input("> "))
        if done == "y":
            done = "☑"
        else:
            done = "☐"
        with open("to_do_list.txt", "r+", encoding='utf-8') as file:  # Crée la liste/l'alimente et l'associe a file
            l = [taskname, "     |      ", done]
            l1 = ''.join(l)
        file.close()
        tempFile = open("to_do_list.txt", 'a+', encoding='utf-8')
        for line in fileinput.input("to_do_list.txt"):
            if linea in line:
                print("d")
            else:
                print("d")
            tempFile.write(line.replace(linea, l1))
        tempFile.close()
        menu()
     
     
    def lire():
        with open("to_do_list.txt", "r+", encoding='utf-8') as file:
            test = file.readlines()
            for i in test:
                print("-", i)
        file.close()
        print("Appuyer sur entrée pour retourner au menu")
        input("")
        menu()
     
     
    def ajouter():
        print("Quelle tache voulez vous ajouter :")
        task = str(input("> "))
        print("La tache est elle finie : (y/n) ")
        done = str(input("> "))
        if done == "y":
            done = "☑"
        else:
            done = "☐"
        with open("to_do_list.txt", "a+", encoding='utf-8') as file:  # Crée la liste/l'alimente et l'associe a file
            l = [task, "     |      ", done, "\n"]
            file.writelines(l)
        file.close()
        menu()
     
     
    def menu():
        print("       Menu :      ")
        print("1. Ouvrir la liste")
        print("2. Ajouter un élément")
        print("3. Modifier un élément")
        print("4. Quitter")
        selectmenu = int(input("> "))
        if selectmenu == 1:
            lire()
        elif selectmenu == 2:
            ajouter()
        elif selectmenu == 3:
            modifier()
        elif selectmenu == 4:
            sys.exit()
        else:
            print("Tu n'as pas sélectionné 1, 2, 3 ou 4.")
            menu()
     
     
    menu()
    Merci pour votre aide

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut


    Je crois que c'est un problème d'encodage, votre fichier n'est pas en 'utf-8'.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Bonjour

    En dehors de l'hypothèse intéressante de danielhagnoul, est-ce que le script précise son encoding (# coding: utf-8 en seconde ligne sous la ligne shebang qui reste obligatoire) ? Parce que quand je vois
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if done == "y":
            done = "☑"
        else:
            done = "☐"
    je me dis que ces caractères ça doit pas être trop de l'ascii.

    Citation Envoyé par iSparks Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            if linea in line:
                print("d")
            else:
                print("d")


    Sinon quelques remarques générales: inutile de fermer un fichier ouvert avec un context manager, le context le ferme pour toi (c'est justement le but). Par ailleurs, quand je vois un menu() qui appelle diverses fonctions où chacune d'elles rappelle le menu() je sens que la charge ne va pas tenir longtemps...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Octobre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2019
    Messages : 3
    Par défaut
    Merci je vais voir ce que je peux faire

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Que signifie ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            done = "☑"
        else:
            done = "☐"
    Pourquoi ouvres-tu ce fichier ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        with open("to_do_list.txt", "r+", encoding='utf-8') as file:
            l = [taskname, "     |      ", done]
            l1 = ''.join(l)
        file.close()
    et de plus, il est inutile de fermer un fichier ouvert avec with.

    Ici on ne comprend rien de tes intentions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        tempFile = open("to_do_list.txt", 'a+', encoding='utf-8')
        for line in fileinput.input("to_do_list.txt"):
            if linea in line:
                print("d")
            else:
                print("d")
            tempFile.write(line.replace(linea, l1))
        tempFile.close()
    tu ouvres un fichier en écriture, tu le réouvres en lecture avec fileinput (qui ne sert pas à cela mais à parcourir une liste de fichiers), si le texte linea se trouve dans une ligne tu print un "d" sinon ... tu print un "d" !
    D'autre part linea est un numéro de ligne du texte mais sous forme de string: linea = input("> ")Ensuite, quoi qu’il en soit, tu ajoutes la ligne au fichier mais comme c'est le même fichier tu remplis celui-ci au fur et à mesure que tu le lis !

    Bref un nettoyage de ton code serait utile avant d'aller plus loin.

  6. #6
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Octobre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2019
    Messages : 3
    Par défaut
    En fait les d c'était juste pour savoir si mon programme pouvais aller jusqu'a là, mais c'est bon j'ai trouvé la solution merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lecture fichier RDS sous python: Problème d'encodage
    Par Marc A dans le forum Interfaçage autre langage
    Réponses: 0
    Dernier message: 01/11/2017, 20h01
  2. Python - SQL problème d'encodage
    Par cocs78 dans le forum Général Python
    Réponses: 6
    Dernier message: 21/02/2017, 11h10
  3. Python + Apache : problème d'encodage UTF8 [résolu]
    Par CetTer dans le forum Général Python
    Réponses: 5
    Dernier message: 16/12/2013, 21h53
  4. Problème d'encodage avec Python
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 22/02/2006, 14h36
  5. [XML::PARSER] Problème d'encodage
    Par frangin2003 dans le forum Modules
    Réponses: 13
    Dernier message: 05/09/2005, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo