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 :

Envoyer des floats continuement dans un binaire


Sujet :

Python

  1. #1
    Membre Expert
    Inscrit en
    Ao�t 2010
    Messages
    1 124
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2010
    Messages : 1 124
    Par d�faut Envoyer des floats continuement dans un binaire
    Bonjour,

    Comment puis-je envoyer des floats dans un fichier binaire en python ? Comment puis-je ensuite les r�cup�rer ?

    Je souhaite garder le fichier ouvert et les ajouter un par un ou 2 par 2, et je cherche une solution performante.

    Merci d'avance

  2. #2
    Membre �clair�
    Homme Profil pro
    D�veloppeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur en formation
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Par d�faut
    Du c�t� du module pickle il y a moyen de faire quelque chose, on peut envoyer plein d'objets dans un fichier :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import pickle
     
    #Pour variable vers fichier :
    with open('monfichier.extension','wb') as f :
        p=pickle.Pickler(f)
        p.dump(variable)
    #Pour fichier vers variable :
    with open('monfichier.extension','rb') as f :
        p=pickle.Unpickler(f)
        variable=p.load()
    Sinon c'est possible de passer par des str.

  3. #3
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 776
    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 776
    Par d�faut
    Salut,

    Un float (binaire) est repr�sent� par une suite de 4 ou 8 bytes.
    Pour transformer un float (object) en bytes, le module struct apporte les fonctions pack et unpack.
    La rapidit� d�pendra du file system cache de l'OS.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre Expert
    Inscrit en
    Ao�t 2010
    Messages
    1 124
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2010
    Messages : 1 124
    Par d�faut
    Merci pour votre aide.

    Une derni�re question, j'essaye d'utiliser pack_into avec un fichier, mais sans succ�s.
    - Est ce que pack_into(...) serait plus performant que file.write(pack(...)) ?
    - Comment puis obtenir � partir d'un fichier le second argument � passer � pack_into ?
    pack_into l�ve une TypeError: expected a writeable buffer object lorsque je lui fournit pour second argument open(r'C:\Programs\text.bin','wb'), io.open(r'C:\Programs\text.bin','wb') ou encore io.FileIO(r'C:\Programs\text.bin','wb').

    J'ai crois� une solution avec memoryview, mais je suis encore en Py2.6. Comment puis-je proc�der ?

  5. #5
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 776
    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 776
    Par d�faut
    Citation Envoy� par VV33D Voir le message
    Une derni�re question, j'essaye d'utiliser pack_into avec un fichier, mais sans succ�s.
    Si vous ne postez pas de code, vous n'aurez que vos mouchoirs...

    J'ai crois� une solution avec memoryview, mais je suis encore en Py2.6. Comment puis-je proc�der ?
    Postez l'URL pour qu'on voit a quoi �a ressemble.

    - W
    PS: pack_into, c'est pour une version mmap i.e. il faut un truc entre le "fichier" et les objets qui sera une structure semblable a un array du module array: la mmap. Pas besoin de memory view a priori.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre Expert
    Inscrit en
    Ao�t 2010
    Messages
    1 124
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2010
    Messages : 1 124
    Par d�faut
    J'ai enfin un code qui a l'air de marcher, mais qui me pose encore des probl�mes ...
    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
     
    import struct, mmap
    def test_struct():
        """ Envoie 2 floats dans un binaire, puis les lis"""
        with open(r'C:\Programs\text.bin','w+b') as f :        
            f.flush() #inutile si non bufferisé
            m=mmap.mmap(f.fileno(),256,"w+b")        
            fmt= 'd'        
            struct.pack_into(fmt, m,0, 1.11)
            struct.pack_into(fmt, m,8, 2.222)    
            m.close()
        with open(r'C:\Programs\text.bin','r+b') as f :
            m=mmap.mmap(f.fileno(),256,'r+b')   
            print struct.unpack_from(fmt,m)
            print struct.unpack_from(fmt,m,8)
            m.close()
    Est-ce la bonne mani�re de proc�der ? C'est bien � moi d'ajuster les offsets � la main selon ce que j'ai d�j� parcouru ?

    Comment dois-je proc�der si je ne connais pas la taille du fichier � l'avance ? Catcher une IOError et cr�er un nouveau mmap ?

    Puis-je utiliser unpack(f.readline()) � la place de unpack_from() (sachant que j'ai utilis� pack_into et non pack) ?

  7. #7
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 776
    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 776
    Par d�faut
    Citation Envoy� par VV33D Voir le message
    Est-ce la bonne mani�re de proc�der?
    Pour l'instant, c'est juste un test des fonctionnalit�s a utiliser "pour" la r�alisation particuli�re.

    Pour le reste, je vois surtout un reader qui a une m�thode .next et un writer qui a une m�thode .append et un constructeur qui r�cup�re un identifiant de type str.

    C'est bien assez pour d�finir une interface et l'utiliser comme abstraction pour construire le programme qui en d�pendra, l'utilisera.
    C'est ce qu'en fera le programme qui dira s'il faut ajouter des primitives a cette interface et comment la r�aliser concr�tement.

    Imaginez que dans un premier temps la r�alisation soit construite avec de simples listes Python. On pourrait les lire et les �crire "one-shot" au lancement et a la sortie avec une m�canique de s�rialisation quelconque.
    Ce sera "good enough" pour g�rer quelques centaines de float et tester les fonctionnalit�s de bases du programme.
    Comme il n'y a pas d�acc�s disque (autre que la pagination) "pendant" les .append et les .next, difficile de faire mieux cote "perf".

    Ce n'est qu�apr�s avoir stabilise le fonctionnel du programme qu'on pourra d�cider "avec quoi" r�aliser cette fonctionnalit� pour de bon.
    Peut �tre qu'une �criture au fil de l'eau sera suffisante, peut �tre pas...
    Dans ce cas, vous aurez une motivation fond�e pour apprendre a utiliser mmap, des threads ou autre technique de buffering.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. envoy�s des messages groupes dans outlook.
    Par deubelte dans le forum Outlook
    R�ponses: 1
    Dernier message: 17/05/2009, 15h30
  2. R�ponses: 10
    Dernier message: 19/06/2006, 19h04
  3. ch a envoyer des donnees dans un tableau d'un fichier
    Par aerosketchique dans le forum C++
    R�ponses: 1
    Dernier message: 08/04/2006, 18h43
  4. R�ponses: 11
    Dernier message: 22/02/2006, 17h25
  5. Envoyer des controles d'un formulaire dans un tableau
    Par CB56 dans le forum VB 6 et ant�rieur
    R�ponses: 3
    Dernier message: 18/11/2005, 10h43

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