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 :

Lecture du contenu d'un fichier compressé en mode texte ?


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 39
    Par défaut Lecture du contenu d'un fichier compressé en mode texte ?
    Bonjour,
    lorsque j'étais en python 2.7, je pouvais parser un fichier texte compressé pour réaliser mes traitements. Depuis 3.3, les données lues sont binaires et mes traitements échouent:

    Voici un ecm :
    soit un fichier foo.txt, foo.zip (contenant le foo.txt compressé)!
    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
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from zipfile import ZipFile
     
    bar=(ZipFile('foo.zip')).open('foo.txt')
    foo=open('foo.txt','r')
     
    for ligne in foo:
        print(ligne.strip('\n'))
     
    print("Zippé maintenant")
    for ligne in bar:
        print(ligne)
        print(ligne.strip('\n'))

    Résultats en 2.7:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    AAA
    BBB
    CCC
    DDD
    Zippé maintenant
    AAA
    BBB
    CCC
    DDD
    Résultats en 3.3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    AAA
    BBB
    CCC
    DDD
    Zippé maintenant
    b'AAA\n'
    Traceback (most recent call last):
      File "ecm.py", line 15, in <module>
        print(ligne.strip('\n'))
    TypeError: Type str doesn't support the buffer API
    J'aimerai, si possible éviter de désarchiver temporairement le fichier à lire.

    Cordialement

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 759
    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 759
    Par défaut
    Salut,
    Avec Python3, les fichiers ouverts 'r' sont lus en unicode et les "str" sont unicode par défaut.

    => Pour avoir des bytes sur le fichier à zipper:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foo=open('foo.txt','rb')
    Par contre, ZipFile().open() retournera maintenant des bytes (en fait pareil qu'avant...) mais dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for ligne in bar:
        print(ligne)
        print(ligne.strip('\n'))
    ligne est "bytes" alors que '\n' est "str" (et donc unicode).
    Forcez '\n' à bytes via un b'\n' : çà "fonctionnera mieux".

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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 39
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Forcez '\n' à bytes via un b'\n' : çà "fonctionnera mieux".
    Merci de cette réponse rapide, je préfèrerai forcer "ligne" en Unicode (en str) puisque il ne s'agissait la que d'un exemple minimum.

    En réalité, mes traitements sur la ligne sont plus complexe, et il ne peuvent être fait que ci celle ci en en 'str'.

    Me reste à trouver comment la convertir en 'str' (j'espérai secrètement qu'un parametre de zipfile m'avait échappé pour me permettre de lire la ligne en 'str' directement)
    @+

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 39
    Par défaut
    Bonsoir,
    un semble faire l'affaire.

    Cordialement

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 759
    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 759
    Par défaut
    Salut,

    Effectivement çà le fait pourvu que vous ayez tout "bytes" ou tout "str" et non un mix. Mais .decode suppose connaître l'encoding des fichiers pour fonctionner proprement.

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

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 39
    Par défaut
    Oui, jai du préciser decode('utf-8','ignore'). C'est pour un usage peso, alors je débogue au fur et à mesure.

    Moi qui croyais que python 3.3 allait enfin me permettre d’arrêter de me prendre la tête avec des histoire d'encoding, c''est rapé !

    @+

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 19/04/2011, 16h28
  2. Réponses: 3
    Dernier message: 15/02/2010, 09h56
  3. la lecture du contenu d'un fichier
    Par zooffy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 12/01/2009, 14h11
  4. Lecture du contenu d'un fichier
    Par nawal_ensias dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2007, 13h23
  5. [VB5] |Lecture du contenu d'un fichier .TXRT|
    Par jlb59 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 04/06/2006, 17h16

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