Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / lire un fichier texte avec python 3.0

lire un fichier texte avec python 3.0

Remonter à Forum général Python
  • lire un fichier texte avec python 3.0

    Envoyé par wlourf le 7 Mars 2009 à 22:36
    Bonjour,

    J'essaye d'utiliser python3.0 pour lire un fichier texte avec les lignes suivantes:

    #! /usr/bin/env python
    # coding=utf-8
    f = os.open('fich.txt','r')
    for line in f:
    print (line)
    f.close


    Le fichier contient des accents, si le fichier est encodé en UTF-8, tout va bien, par contre si l'encodage est ISO-8859-15, j'ai le méchant message suivant :

    File "fop.py", line 5, in
    for line in f:
    File "/usr/lib/python3.0/io.py", line 1733, in __next__
    line = self.readline()
    File "/usr/lib/python3.0/io.py", line 1807, in readline
    while self._read_chunk():
    File "/usr/lib/python3.0/io.py", line 1556, in _read_chunk
    self._set_decoded_chars(self._decoder.decode(input_chunk, eof))
    File "/usr/lib/python3.0/io.py", line 1293, in decode
    output = self.decoder.decode(input, final=final)
    File "/usr/lib/python3.0/codecs.py", line 300, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
    UnicodeDecodeError: 'utf8' codec can't decode bytes in position 49-51: invalid data


    Que faut-il donc faire pour pouvoir lire ce type de fichier sans problème (ce script devrait être utilisé sous windows comme sous linux)?

    C'était mon premier post ici, autant dire que je débute!

    Merci
    • Re: lire un fichier texte avec python 3.0

      Envoyé par jacko le 9 Mars 2009 à 12:52
      1/
      N'utilise pas os.open(), réservée à un accès bas niveau, mais plutôt la fonction standard open().

      2/
      Pour un décodage particulier, précise le codec comme suit :
      f=open('fich.txt','r',encoding="iso8859_15" )
      • Re: lire un fichier texte avec python 3.0

        Envoyé par wlourf le 9 Mars 2009 à 23:22
        ok merci, pour open c'est en effet écrit à la première ligne de la doc,
        sinon le problème est que je ne sais pas à priori quel sera l'encodage du fichier à lire .
      • Re: lire un fichier texte avec python 3.0

        Envoyé par wlourf le 9 Mars 2009 à 23:22
        ok merci, pour open c'est en effet écrit à la première ligne de la doc de "os",
        sinon le problème est que je ne sais pas à priori quel sera l'encodage du fichier à lire .
    • Re: lire un fichier texte avec python 3.0

      Envoyé par jacko le 10 Mars 2009 à 14:07
      C'est un peu comme lire un fichier image sans savoir a priori s'il s'agit d'un tiff, d'un jpeg, d'un bmp, etc. Il faut utiliser divers moyens :
      - se baser sur l'extension du nom du fichier (.jis pour un texte japonais par ex.).
      - il n'y a pas d'en-tête "magic" pour la plupart des encodages de texte. Donc mauvaise idée.
      - essayer successivement les encodages les plus fréquents, en attrapant l'exception par un try...except.
      - peut-être existe-t-il des outils réutilisables (modules ?) qui essaient de déterminer l'encodage par diverses heuristiques. A chercher...
      Bon courage.
Rendu par Ploneboard