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 :

Ecrire / Lire un fichier binaire


Sujet :

Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Ecrire / Lire un fichier binaire
    Bonjour,

    Je réalise des modules Python qui enrichissent une petite base de données en interprétant des csv.
    Je souhaite implémenter des fonctions pour sauvegarder puis recharger cette base de données dans et depuis un fichier sans avoir à relancer l'interprétation des csv déjà traités.

    En C, il me suffirait d'écrire puis de lire un fichier binaire à l'aide des fonctions fwrite et fread. Je cherche un équivalent en Python. J'ai bien essayé les modules pickle, marshal, etc mais mon besoin est beaucoup trop basique pour justifier l'utilisation de ces modules (j'ai l'impression d'utiliser un marteau piqueur pour écraser une fourmi)

    En fait, mon besoin est tellement simple que j'ai l'impression que la solution est sous mon nez. Pourriez vous m'aider ?

    Merci d'avance,

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Bonsoir,

    Qu’est ce que tu entends par «implémenter des fonctions» ,stp ?
    Pourquoi le terme «implémenter» ?

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Si le fichier tient en mémoire, les fonctions basiques de lecture/écriture sont, par exemple:

    Pour la lecture:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    f = open(r"D:\Images\IMG_0083.JPG", 'rb')
    ch = f.read()
    f.close()
    ch est une chaine de caractère contenant tous les octets du fichier sur disque.

    Pour l'écriture:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    f = open(r"D:\Images\IMG_0083_copie.JPG", 'wb')
    f.write(ch)
    f.close()
    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Merci pour vos réponses.

    @eyquem
    La base de données est une classe. Je souhaite lui ajouter 2 méthodes : la première pour sauvegarder la Bdd dans un fichier et la deuxième pour reconstruire la Bdd à partir de ce même fichier.

    Faut vraiment voir c'est deux méthodes comme l'équivalent de fread/fwrite en C.

    @tyrtamos
    Ca ressemble plus à ce que je cherche, merci. La variable que je souhaite sauvegarder est une instance d'une classe que j'ai créée. Cela semble poser problème car j'obtiens l'erreur suivante :

    ftest.write(test3)
    TypeError: argument 1 must be convertible to a buffer, not BddComposants

    BddComposants étant le nom de ma classe.

    Cependant, je crois que ta manip dit seulement à l'interpréteur python de ne pas interpréter d'éventuels caractères spéciaux contenus dans la chaine.


    Je cherche du coté du module io là.

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Si la base de donnée est une classe et si c'est la classe (ou plutôt l'instance de classe) que tu veux sauvegarder ou recharger, il est plus simple d'utiliser un module comme shelve. Voici un petit exemple:

    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
    23
    24
     
    import shelve
     
    class Test(object):
        def __init__(self,x):
            self.x = x
     
    A = Test('toto')
    B = Test('titi')
     
    # sauvegarde des objets
    d = shelve.open(r"D:\Images\bdd_test")
    d['A'] = A
    d['B'] = B
    d.close()
     
    # récupération des objets sauvegardés
    d = shelve.open(r"D:\Images\bdd_test")
    A2 = d['A']
    B2 = d['B']
    d.close()
     
    print A2.x  # affiche 'toto'
    print B2.x  # affiche 'titi'
    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. Lire un fichier binaire
    Par vancim dans le forum Pascal
    Réponses: 3
    Dernier message: 20/10/2006, 02h13
  2. comment lire des fichiers binaires
    Par compton dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 06/07/2006, 12h03
  3. [C#] Lire un fichier binaire
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/06/2006, 18h08
  4. lire un fichier binaire 8bit apr 8bit
    Par lykim dans le forum Entrée/Sortie
    Réponses: 21
    Dernier message: 12/05/2006, 17h09
  5. [NIO]Lire un fichier binaire
    Par Info-Rital dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 25/07/2005, 07h50

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