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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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 : 35
    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
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    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 averti
    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 : 35
    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
    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 Expert

    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
    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 confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 063
    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 : 4 063
    Par défaut
    Il y avait la source ICI.

  6. #6
    Membre averti
    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 : 35
    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
    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
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    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]

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