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 :

Problème pour écriture dans un fichier


Sujet :

Python

  1. #1
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut Problème pour écriture dans un fichier
    Bonjour,

    Je ne comprend pas un message d'erreur lorsque je souhaite écrire dans un fichier texte.

    voici le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "C:/Documents and Settings/Bureau/File_Modif/tutu.py", line 7, in <module>
        f.write(toto)
    TypeError: expected a character buffer object
    et voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    f=open("file.txt","w")
     
    for n in range(1,10):
        #f.write(n)
        f.write(n)
    f.close()
    Pourtant lorsque je fait un print(n) j'obtient bien pour chaque itération un Int, qui ne devrait pas causer de problèmes lors de l'écriture dans le fichier .txt.

    Une idée ?

    Merci de votre aide

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Tu passes un entier à la méthode write() et elle n'est pas censée convertir en chaîne de caractères pour toi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> f = open('texte', 'w')
    >>> f.write(5)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: expected a character buffer object
    >>> f.write(str(5))
    >>> f.close()
    Note qu'avec l'exemple que tu donnes, tous tes caractères seront collés à la suite:
    123456789
    donc, en général on construit d'abord ses chaînes de texte avant de les écrire.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> t = " ".join([str(i) for i in range(1, 10)])
    >>> f = open('texte', 'w')
    >>> f.write(t)
    >>> f.close()
    1 2 3 4 5 6 7 8 9

  3. #3
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Tu passes un entier à la méthode write() et elle n'est pas censée convertir en chaîne de caractères pour toi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> f = open('texte', 'w')
    >>> f.write(5)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: expected a character buffer object
    >>> f.write(str(5))
    >>> f.close()
    Note qu'avec l'exemple que tu donnes, tous tes caractères seront collés à la suite:

    donc, en général on construit d'abord ses chaînes de texte avant de les écrire.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> t = " ".join([str(i) for i in range(1, 10)])
    >>> f = open('texte', 'w')
    >>> f.write(t)
    >>> f.close()
    Ok merci pour tes indications, ça m'a permit de régler mon soucis.

    Par contre j'aurais souhaité que mes données s'écrivent à la ligne à chaque fois et non pas sur la même ligne.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Par défaut
    Salut,

    pour retourner à la ligne dans une chaine de caractères, il suffit d'insérer un "\n" à l'endroit ou tu désire revenir à la ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> print "test\nretour"
    test
    retour

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,
    Pour être cohérent avec ce qu'a déjà présenté VinsS:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> t = " ".join([str(i) for i in range(1, 10)])
    il suffit de remplacer " " par "\n" ou mieux par os.linesep:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> t = os.linesep.join([str(i) for i in range(1, 10)])
    - W

    edit: pensé .linesep mais écrit .sep
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Par défaut
    ah je connaissais pas os.linesep
    merci pour l'info

  7. #7
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Je ne connaissais pas non plus os.linesep

    Merci de votre aide.

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

Discussions similaires

  1. [FTP] problème d'écriture dans un fichier
    Par oops! dans le forum Langage
    Réponses: 14
    Dernier message: 08/08/2006, 16h52
  2. Probléme pour ecrire dans un fichier
    Par julien1981 dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 27/06/2006, 11h18
  3. problème d'écriture dans un fichier
    Par seurjer dans le forum Langage
    Réponses: 8
    Dernier message: 01/06/2006, 09h15
  4. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15
  5. Problème d'écriture dans un fichier xml
    Par vanoou dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/07/2005, 02h28

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