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 :

Compter ne nombre de ligne d'un fichier donne erreur "UnicodeDecodeError"


Sujet :

Python

  1. #1
    Membre à l'essai
    Femme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Décembre 2016
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Compter ne nombre de ligne d'un fichier donne erreur "UnicodeDecodeError"
    Bonjour,

    Je m'acharne tant bien que mal a vouloir compter le nombre de lignes d'un fichier.
    Le problème c'est à un moment de parsage du fichier, je vois une erreur "UnicodeDecodeError" apparaître.

    Script:
    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
     
    import io
     
    def file_lengthy(fname):
            #with open(fname,encoding='utf-8') as f:
            with io.open(fname) as f:
                    for i, l in enumerate(f):
                            print(l.rstrip("\n"))
                            pass
            return i + 1
     
    #wordfile to use
    wordfile = "/home/gr3g/ctf/wordlist/rockyou.txt"
     
    #print("Number of lines in the file: ",file_lengthy("test.txt"))
    print("Number of lines in the file: ",file_lengthy(wordfile))
    Erreur:
    $ python3 filelength.py
    [...]
    pernille1
    pernes
    pernambucano
    permatang
    permataku
    permatahati
    Traceback (most recent call last):
    File "filelength.py", line 15, in <module>
    print("Number of lines in the file: ",file_lengthy(wordfile))
    File "filelength.py", line 6, in file_lengthy
    for i, l in enumerate(f):
    File "/usr/lib/python3.5/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 940: invalid continuation byte
    La suite du dictionnaire c'est :

    601939 perman
    601940 permainan
    601941 perlucha
    601942 perliza
    601943 perlittapmf
    601944 perlita99
    601945 perling
    601946 perlax
    601947 perlar
    601948 perlamassiel
    601949 perlam
    601950 perla8
    601951 perla21
    601952 perla10
    601953 perl1ta
    601954 perky2
    601955 perkutut

    Donc il n'y a pas de mots qui nécessitent un encodage spécifique si ?

    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Citation Envoyé par raydonovan Voir le message
    Donc il n'y a pas de mots qui nécessitent un encodage spécifique si ?
    L'erreur mentionne le byte '0xf1' à la position 940 et dit que ce n'est pas de l'UTF-8.
    Si vous ne voulez pas "décoder", lire le fichier en mode binaire et compter les '\n' suffirait.

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

  3. #3
    Membre à l'essai
    Femme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Décembre 2016
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Effectivement ce code fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    def file_lengthy(fname):
            with open(fname,'rb') as f:
                    for i, l in enumerate(f):
                            #print(l)
                            pass
            return i + 1 
     
    #wordfile to use
    wordfile = "/home/gr3g/ctf/wordlist/rockyou.txt"
     
    print("Number of lines in the file: ",file_lengthy(wordfile))
    Mais quand je mettais 'rb' tout en enlevant les \n, ça me générait une erreur je me rappelle !

    Merci en tout cas

  4. #4
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Si vous n'utiliser pas le enumerate alors autant l'enlever ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def file_lengthy(fname):
            with open(fname,'rb') as f:
                    n = len(f)
            return n + 1

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 811
    Points : 7 096
    Points
    7 096
    Par défaut
    Il y avait la source ICI.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  6. #6
    Membre à l'essai
    Femme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Décembre 2016
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Si vous n'utiliser pas le enumerate alors autant l'enlever ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def file_lengthy(fname):
            with open(fname,'rb') as f:
                    n = len(f)
            return n + 1
    Oui du coup, ce nouveau code fonctionne parfaitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def file_lengthy(fname):
            i=0
            with open(fname,'rb') as f:
                    for l in f:
                            i=i+1
            return i
    merci

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par raydonovan Voir le message
    Oui du coup, ce nouveau code fonctionne parfaitement:
    Dans ce cas, autant simplifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def file_lengthy(fname):
    	with open(fname,'rb') as f:
    		return len(tuple(f))
    @lg_53: on ne peut pas demander directement len(f) car l'objet "file" n'a pas de méthode "len". D'où le cast en tuple...
    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]

  8. #8
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    @lg_53: on ne peut pas demander directement len(f) car l'objet "file" n'a pas de méthode "len". D'où le cast en tuple...
    En effet !

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/06/2007, 10h53
  2. Compter le nombre de ligne dans un fichier
    Par amine_en_france dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 31/05/2007, 17h19
  3. Compter le nombre de lignes d'un fichier ?
    Par [ZiP] dans le forum Delphi
    Réponses: 5
    Dernier message: 22/03/2007, 14h08
  4. Compter le nombre de lignes d'un fichier excel
    Par Freerideuse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/07/2006, 21h49
  5. Réponses: 2
    Dernier message: 02/03/2004, 19h38

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