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 :

écrire directement en octets dans un fichier


Sujet :

Python

  1. #1
    Membre éclairé Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Par défaut écrire directement en octets dans un fichier
    Salut !

    Je me suis décidé à créé un programme en python, le problème est qu'il y a un truc que je n'arrive pas à faire et que malgré toute mes recherches je n'ai rien réussi à trouvé :'( j'appaire donc que c'est possible...

    J'aimerais écrire dans des fichiers directement des octets ! et pas des chaînes de caractères...
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #j'aimerais faire un truc qui ressemble a ca (ce code ne marche pas car write ne s'attend pas à recevoir un float) 
    Fichier = open('fichier','ab+')
    Fichier.write(12.32)
    Pour ce qui connaisse le C il aurait fallu faire ca comme ca dans ce langage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FILE * Fichier = fopen("fichier","ab+");
    float variable = 12.32;
    fwrite(&variable, 1, sizeof(float), Fichier);
    Savez vous si c'est possible à faire un truc comme ca en python ??

    Merci pour votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Le module pickle pourrait peut-être t'apporter une réponse intéréssante si j'ai bien compris ton problème:
    Nous avons enregistré trois valeurs numériques. Mais comment pouvons-nous les distinguer
    dans la chaîne de caractères résultante, lorsque nous effectuons la lecture du fichier ? C'est
    impossible ! Rien ne nous indique d'ailleurs qu'il y a là trois valeurs plutôt qu'une seule, ou 2, ou
    4, ...
    Il existe plusieurs solutions à ce genre de problèmes. L'une des meilleures consiste à importer un
    module Python spécialisé : le module pickle42
    [...]
    Pour cet exemple, on considère que les variables a, b et c contiennent les mêmes valeurs que
    dans l'exemple précédent. La fonction dump() du module pickle attend deux arguments : le premier
    est la variable à enregistrer, le second est l'objet fichier dans lequel on travaille. La fonction
    pickle.load() effectue le travail inverse, c'est-à-dire la restitution de chaque variable avec son type.
    Vous pouvez aisément comprendre ce que font exactement les fonctions du module pickle en
    effectuant une lecture « classique » du fichier résultant, à l'aide de la méthode read() par exemple.
    (Source: Python Notes p117)

    il permet d'enregistrer dans un fichier des valeurs et leur type, et pouvoir les récupérer sans inventer de séparateur texte. (Décidément python .. c'est trop bon )

  3. #3
    Membre éclairé Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Par défaut
    Merci pour ta réponse...

    Oui c'est presque ça que je veux faire à par que je veux QUE écrire leur valeurs et pas leur types ... :^/

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Le module struct est fait pour ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import struct
     
    Fichier = open('fichier','ab+')
    Fichier.write(struct.pack("%f", 12.32))

  5. #5
    Membre éclairé Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Par défaut
    Ha oui !! effectivement ça marche avec ça (enfin il faut juste enlever le « % ») Merci pour ton aide =)

    Par contre du coup j'ai une petite question de curiosité :^/
    j'ai vue dans la documentation qu'il y a le type "P" qui est un "void *" mais j'ai que réussi a le faire marcher qu'avec un type string... c'est quoi exactement son rôle ?

    es que ça donne le pointeur de la variable qu'on lui donne de type string ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Ekinoks
    Merci pour ta réponse...

    Oui c'est presque ça que je veux faire à par que je veux QUE écrire leur valeurs et pas leur types ... :^/
    Tu ne veux que les valeurs d'accord, mais leur type c'est pour pouvoir les relire, et les récupérer ensuite.
    Tu comptes t'y prendre comment sinon ?

  7. #7
    Membre éclairé Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Par défaut
    Bha en fait, c'est pour me créé un format de fichier binaire... du coup je connait leur type d'apres les spécification de mon format...

  8. #8
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    Il faut savoir une chose : en python les flux d'octet et les flux de string sont identique ... la difference est que les flux de string son affichable et les flux d'octet ne le sont pas toujours (ou fond des sympbole egyptien ).
    Apres je ne sais pas (je n'ai pas vraiment chercher en fait) comment transformer un int de 0 à 255 en octet "string"

    bonne recherche

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

Discussions similaires

  1. écrire et lire des octets dans un fichier
    Par toutounesan dans le forum VB.NET
    Réponses: 3
    Dernier message: 23/06/2011, 10h52
  2. écrire sur plusieurs lignes dans un fichier
    Par kenny49 dans le forum Langage
    Réponses: 3
    Dernier message: 06/04/2007, 11h47
  3. Réponses: 2
    Dernier message: 27/06/2006, 14h33
  4. Comment écrire en big endian dans un fichier ?
    Par j3d dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 24/07/2005, 21h50
  5. Réponses: 3
    Dernier message: 29/12/2004, 17h10

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