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 d'écriture dans un fichier en mode binaire


Sujet :

Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Problème d'écriture dans un fichier en mode binaire
    Bonjour,

    Je suis débutant avec python. J'utilise le module configparser pour écrire dans un fichier et le diviser en section. Jusque là, ça marche, mais lorsque je veux écrire dans fichier en mode binaire, j'obtiens une erreur. (J'utilise le mode d'écriture binaire pour après écrire des objets comme des listes)

    Voici mon 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
    # -*-coding:Latin-1 -* 
     
    import os
    import configparser
     
    #Création du parser
    config = configparser.RawConfigParser()
     
    #Création des sections
    config.add_section("Nom")
     
    #Création du fichier parser
    with open(os.path.join("test", "vide.map"), "wb") as fichier:
    	config.write(fichier)
    J'obtiens donc cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Traceback (most recent call last):
      File "C:\Users\Mathias\Desktop\Python\Jeu\test.py", line 14, in <module>
        config.write(fichier)
      File "C:\Python32\lib\configparser.py", line 901, in write
        self._sections[section].items(), d)
      File "C:\Python32\lib\configparser.py", line 905, in _write_section
        fp.write("[{}]\n".format(section_name))
    TypeError: 'str' does not support the buffer interface
    J'utilise python 3.2.1 comme version.

    Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Je pensais qu'on utilisait le binary mode pour une meilleure compatibilité entre linux et windows, je ne savais pas que l'on pouvait placer des objets python de cette manière.

    Je ne connais pas configparser, mais normalement je ne connais que la méthode de sérialisation (cpickle, json, ...) permettant de faire ce genre de chose.

    Je pense que ton problème vient du fait que tu choisis le mode binaire et non du code.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci pour ta réponse.

    J'ai utilisé l'exemple de la doc : http://docs.python.org/library/configparser.html

    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
    19
    20
    21
    22
    import ConfigParser
     
    config = ConfigParser.RawConfigParser()
     
    # When adding sections or items, add them in the reverse order of
    # how you want them to be displayed in the actual file.
    # In addition, please note that using RawConfigParser's and the raw
    # mode of ConfigParser's respective set functions, you can assign
    # non-string values to keys internally, but will receive an error
    # when attempting to write to a file or when you get it in non-raw
    # mode. SafeConfigParser does not allow such assignments to take place.
    config.add_section('Section1')
    config.set('Section1', 'int', '15')
    config.set('Section1', 'bool', 'true')
    config.set('Section1', 'float', '3.1415')
    config.set('Section1', 'baz', 'fun')
    config.set('Section1', 'bar', 'Python')
    config.set('Section1', 'foo', '%(bar)s is %(baz)s!')
     
    # Writing our configuration file to 'example.cfg'
    with open('example.cfg', 'wb') as configfile:
        config.write(configfile)
    Pourtant mon programme est identique à celui de la doc...

    J'ai déjà utilisé pickle pour les objets. Mais l'idée est de diviser le fichier en plusieurs parties (sections) pour ensuite l'analyser par le programme. Le but est de créer un fichier qui permettra de créer une map avec toutes sortes d'infos (nom de la map, tuiles pour le sol, tuiles pour la couche1, tuiles pour la couche2, collision, ...) pour un petit rpg simple.

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Oui je suis d'accord, j'ai bien compris ce que tu voulais faire.

    En fait la méthode write demande un objet fichier en argument, et je pensais que cpickle par exemple (json ou autres) te renvoyant un objet fichier, tu pourrais peut-être l'utiliser pour l'implanter avec configparser en mode binaire.

    Mais en ce qui concerne des fichiers je dirais de type simple, utiliser le mode 'w' et non 'wb'.

    Est-ce que c'est faisable, je ne sais pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.write(pickle.dump(ma_liste, open(mon_fichier))
    Un truc dans ce genre quoi.

    Parce-que comme je l'ai dis précédemment, je ne connais que pickle, json ou autre permettant d'inscrire dans un fichier un objet python.

    Maintenant je peux me tromper
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci pour ton aide, mais ça ne marche pas, tant pis, je vais séparer les fichiers alors.

  6. #6
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Regarde plutôt la doc de ta version de python (3.2 je pense): http://docs.python.org/py3k/library/configparser.html.

    Chez moi, en python 2.6 (avec import ConfigParser à la place, l'exemple marche correctement). En 3.2 à priori, il faut faire config['Nom'] = {}. Enfin, la page que tu donne pointe vers 2to3 pour migrer du code déjà écrit en python2 vers python3 (si tu as déjà écrit beaucoup de chose...)

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci de ton aide, problème résolu

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

Discussions similaires

  1. problème d'écriture dans un fichier
    Par cartonol dans le forum Oracle
    Réponses: 12
    Dernier message: 17/08/2006, 17h08
  2. [FTP] problème d'écriture dans un fichier
    Par oops! dans le forum Langage
    Réponses: 14
    Dernier message: 08/08/2006, 16h52
  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