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 :

probleme d'encodage [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Musicien amateur
    Inscrit en
    Mars 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Musicien amateur

    Informations forums :
    Inscription : Mars 2018
    Messages : 16
    Par défaut probleme d'encodage
    Bonjour, je code un programme qui nous montre le chemin entre 2 pages Wikipédia uniquement avec les liens hypertextes (le principe du jeu wikipedia).

    J'utilise l'import "wikipedia", voici la documentation: https://wikipedia.readthedocs.io/en/.../code.html#api

    J'ai donc commencé mon code, pour l'instant il détecte que si le lien cherché est dans la page de départ. (si vous voulez essayer, utilisez la page de départ "Philippe Bernier" (trouvée au hasard) parce qu'il n'y a que 24 liens à tester)

    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
    import wikipedia as wiki
     
    ##
    # -*- coding: utf-8 -*-
    wiki.set_lang("fr")
    ##
     
     
     
    def main():
        chemin =[]
        entree = input("page de départ: ")
        sortie = input("page d'arrivée: ")
        chemin = [entree]
        deg1 = construction1(entree,sortie)
        deg2 = 0
        deg3 = 0
        if deg1 == 1:
            chemin.append(sortie)
        if deg1 == 1 or deg2 == 1 or deg2 == 1:    
            taille = len(chemin)
            for c in range(taille):
                print(str(chemin[c]))
        else:
            print("lien non-trouvé")
    def construction1(entree,sortie):
        fichier = open("degre1.txt", "w") 
        taille = len(wiki.page(entree).links) 
     
        for c in range(taille):
            lien=str(str(wiki.page(entree).links[c]).encode(encoding='utf-8')) # enregistre l'élement c de la liste links en string
            fichier.write(lien +"\n") #besoin pour la suite du programme (non ecrit)
            if lien == ( "b\'"+sortie+"\'") or lien == ( 'b\"'+sortie+'\"'): # trouve si la page est la sortie
                return 1
            print(str(c+1)+"/"+str(taille)+" "+"degre1"+" "+lien) # montre l'avancement dans la console
     
        return 0
     
    main()
    Le code marche bien lorsque je cherche par exemple: "Philippe Bernier vers Toulouse".

    Mon problème est que python n'écrit pas les accents de la page "é" mais "\xc3\" alors que j'ai l'encodage Utf-8 le problème étant que quand je demande de trouver une page avec accent il la trouve pas:

    console:
    page de départ: Moraleja del Vino

    page d'arrivée: Héraldique
    1/20 degre1 b'2019'
    2/20 degre1 b'Aire (g\xc3\xa9om\xc3\xa9trie)'
    3/20 degre1 b'Altitude'
    4/20 degre1 b'Castille-et-Le\xc3\xb3n'
    5/20 degre1 b'Code postal'
    6/20 degre1 b'Communaut\xc3\xa9 autonome'
    7/20 degre1 b"Communaut\xc3\xa9s autonomes d'Espagne"
    8/20 degre1 b'Commune (Espagne)'
    9/20 degre1 b'Coordonn\xc3\xa9es g\xc3\xa9ographiques'
    10/20 degre1 b'Densit\xc3\xa9 de population'
    11/20 degre1 b'District judiciaire de Zamora'
    12/20 degre1 b'District judiciaire espagnol'
    13/20 degre1 b'Espagne'
    14/20 degre1 b'H\xc3\xa9raldique'
    15/20 degre1 b'Liste des communes de la province de Zamora'
    16/20 degre1 b'Liste des pays du monde'
    17/20 degre1 b'Maire'
    18/20 degre1 b'Province de Zamora'
    19/20 degre1 b"Provinces d'Espagne"
    20/20 degre1 b'Recensement de la population'
    lien non-trouvé

    Il ne trouve pas car "Héraldique" est "H\xc3\xa9raldique"


    J'aimerais savoir comment faire pour qu'il détecte TOUT les caractères spéciaux.
    Merci d'avance pour vos réponses

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Relisez la ligne 31 et essayez d'expliquer ce que vous avez cherché à faire.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Musicien amateur
    Inscrit en
    Mars 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Musicien amateur

    Informations forums :
    Inscription : Mars 2018
    Messages : 16
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Relisez la ligne 31 et essayez d'expliquer ce que vous avez cherché à faire.

    - W
    Bonjour, la vraie ligne est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lien=str(wiki.page(entree).links[c]).encode(encoding='utf-8')
    en gros, je convertis l'élément numéro C de la liste links (liens hypertextes présents dans la page "entrée") en string encodé en utf8 sinon ça crash.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ah l'encodage ! Qu'est ce que ça me saoule, une perte de temps... Mais bon là ton code est bourré d'erreurs ! Je t'ai fais le ménage, je t'ai supprimé des variables parce que je ne voyais pas à quoi elle servait...

    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
    import wikipedia as wiki
     
    ##
    # -*- coding: utf-8 -*-
    wiki.set_lang("fr")
    ##
     
     
     
    def main():
        chemin =[]
        entree = input("page de départ: ")
        sortie = input("page d'arrivée: ")
        chemin = [entree]
        if construction1(entree,sortie):
            chemin.append(sortie)
            taille = len(chemin)
            for c in range(taille):
                print(str(chemin[c]))
        else:
            print("lien non-trouvé")
    def construction1(entree,sortie):
        fichier = open("degre1.txt", "w") 
        taille = len(wiki.page(entree).links) 
     
        for c in range(taille):
            lien=(wiki.page(entree).links[c])
            fichier.write(lien +"\n") # Tu fermes le fichier quelque part ???
            if lien == sortie: 
                return 1
            print(str(c+1)+"/"+str(taille)+" "+"degre1"+" "+lien)
     
        return 0
     
    main()
    Résultat :
    page de départ: Philipe Bernier
    page d'arrivée: Médecins sans frontières
    1/24 degre1 17 août
    2/24 degre1 17 avril
    3/24 degre1 1930
    4/24 degre1 2000
    5/24 degre1 Alger
    6/24 degre1 Août 1930
    7/24 degre1 Avril 2000
    8/24 degre1 Bernier
    9/24 degre1 Bois-Colombes
    10/24 degre1 France
    11/24 degre1 Francs-tireurs et partisans
    12/24 degre1 Front de libération nationale (Algérie)
    13/24 degre1 International Standard Book Number
    14/24 degre1 Journaliste
    15/24 degre1 Les Échos
    16/24 degre1 Lot (département)
    17/24 degre1 Maroc
    18/24 degre1 Mehdi Ben Barka
    Philipe Bernier
    Médecins sans frontières
    Dernière modification par Invité ; 27/07/2020 à 15h31. Motif: Passage des balises CODE aux balises QUOTE

  5. #5
    Membre averti
    Homme Profil pro
    Musicien amateur
    Inscrit en
    Mars 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 19
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Musicien amateur

    Informations forums :
    Inscription : Mars 2018
    Messages : 16
    Par défaut Merci
    Merci d'avoir réglé ce code, je ne comprends pas la différence au niveau de la récupération du lien mais ça marche (pourrais-tu m'expliquer?)
    Pour les variables inutiles et le fichier non fermé c'est pour le futur puisque que projet consiste à chercher les liens à 3 ou 4 degrés.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par blue dragon Voir le message
    Merci d'avoir réglé ce code, je ne comprends pas la différence au niveau de la récupération du lien mais ça marche (pourrais-tu m'expliquer?)
    Pour les variables inutiles et le fichier non fermé c'est pour le futur puisque que projet consiste à chercher les liens à 3 ou 4 degrés.

    Ben pour le coup tu n'avais pas besoin d'encoder quoique se soit... Par contre c'est fait exprès tes or qui répètent la même condition ???

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

Discussions similaires

  1. Encodage de caracteres: eviter 81, 8D, 8F, 90, 9D ->
    Par Fladnag dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 27/04/2004, 11h17
  2. Encodage de cd en fichier mp3
    Par clovis dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 08/04/2004, 01h13
  3. [ENCODAGE][JAVA]Afficher correctement des accents
    Par kornelius dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 17/02/2004, 16h37
  4. Encodages DOS et Windows
    Par Aramis dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2003, 17h55
  5. [VB6] fonction d' encodage URL en VB
    Par jeanseb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/01/2003, 11h16

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