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 :

Readline rend un string vide


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Readline rend un string vide
    Bonjour,

    je suis débutant en Python. Je cherche à me créer une macro pour traiter une belle quantité de fichiers textes : des mails enregistrés sur mon disque, que je dois formater en LaTeX. C'est l'objectif final, j'avance peu à peu.

    Pour le moment je n'en suis qu'au début, et j'ai un problème avec ce code :
    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
     
    LaListe = open('list','r')
    a=0
    b=0
    datte = "Date:"
    while (a<3): 
    	lenom = LaListe.readline()
    	LeNom = lenom.replace("\n","")
    	Fichier = open(LeNom,'a+')
    	while 1 :
    		line = Fichier.readline()
    		if line == '':
    			break
    		if datte in line:
    			Fichier.write(line)
    	Fichier.close()
    	a=a+1
    LaListe .close()
    Le tout s'exécute sans erreur.
    Mon problème est que Fichier.readline() est vide, systématiquement (le problème persiste avec .read et .readlines). Alorsque Fichier.write('qqch') écrit dans Fichier.
    J'avoue ne pas arriver à cerner le problème.

    Pouvez-vous m'aider ?

    Merci,

    4ADjax

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    open(file, "a+") ouvre le fichier en écriture selon le mode "append", donc ajout à la fin du fichier.

    readline est selon moi positionné à la fin du fichier où il n'y a rien à lire.

    Mais il y a un autre problème, c'est que c'est le même fichier que tu lis et dans lequel tu réécris ce que tu viens de lire, tu ne confonds pas tes fichiers par hasard ?



    Edit: Je viens de vérifier et contrairement à ce que je pensais, readline est bien positionné au début du fichier, ce n'est donc pas là le problème de chaîne vide, reste la question du fichier.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Salut,

    concernant la lecture et l'écriture dans le même fichier, en effet, ce n'est sans doute pas optimal... Je vais y remédier.

    Concernant le 'a+', je comprends. Par contre, j'ai un problème également avec le mode read, puisque je ne peux tout simplement pas y accéder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    File "/usr/lib/python3.2/codecs.py", line 300, in decode
        (result, consumed) = self._buffer_decode(data, self.errors, final)
    UnicodeDecodeError: 'utf8' codec can't decode byte 0xb4 in position 2870: invalid start byte
    Encore une fois, je ne sais pas comment passer outre. (c'est d'ailleurs pour cela que je suis passé au a+ sans prêter attention au caractère 'append'...

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    c'est l'encodage même du fichier qui pose problème non?

    faudrait l'éditer et le ré-enregistrer au bon format peut-être ...

  5. #5
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    ou bien ouvrir le fichier en binaire et traiter avec des bytes plutôt que des str.

    concernant la lecture et l'écriture dans le même fichier, en effet, ce n'est sans doute pas optimal... Je vais y remédier.
    C'est surtout que ce que voulait dire VinsS, c'est que lorsequ'un fichier est ouvert en mode 'a' ou 'a+', la tête de lecture/écriture est plaçée à la fin du fichier, donc il ne reste plus rien à lire, il faut deplaçer "tête de lecture/écriture" avec la methode seek.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 290
    Points : 426
    Points
    426
    Par défaut module codec
    Vous avez visiblement un problème d'encodage en lecture car votre fichier n'est pas en utf-8 qui est l'encodage par défaut de python 3.

    En python 2.X, je sais qu'il y a le module codecs qui permet d'ouvrir les fichiers en sépcifiant l'encodage (ex: latin-1) et qui résoud le problème.

    Si vous ne connaissez pas l'encodage, vous pouvez utiliser la fonction sys.getfilesystemencoding() je pense.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    en effet l'encodage était mauvais. Le mode d'enregistrement des mails n'était pas le bon. J'ai résolu le problème avec une extension de Thunderbird enregistrant les mails en fichier texte.

    En effet, le problème du readline vide était dû au 'a'. C'est bon à présent.

    J'ai terminé ma macro, elle fonctionne bien.

    Merci pour votre aide.

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

Discussions similaires

  1. création string vide suivant taille voulue
    Par voyageur dans le forum C#
    Réponses: 1
    Dernier message: 26/03/2008, 14h27
  2. [XML] gestion des string vide?
    Par bakonu dans le forum C#
    Réponses: 11
    Dernier message: 15/03/2008, 00h52
  3. Champs String vide avec xlsread
    Par benoitbs dans le forum MATLAB
    Réponses: 9
    Dernier message: 18/02/2008, 15h50
  4. WS Paramètre String vide à la récéption
    Par nicolas_gisd dans le forum Services Web
    Réponses: 1
    Dernier message: 06/02/2008, 11h12
  5. Réponses: 16
    Dernier message: 19/05/2005, 16h20

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