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 :

Portage Struct.unpack


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de airballman
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 256
    Par défaut Portage Struct.unpack
    Bonjour,

    je développe actuellement une pallication entièrement codée sous python qui doit pouvoir être protable de linux à windows.

    La premiere partie de mon algo consiste à recuperer des données brutes à l'aide de la fonction unpack du module struct; ce quie se passe sans probleme avec n'importe quel fichier sous linux.

    Pourtant au passage a windows, j'obtiens l'erreur que toute personne ayant utilisé unpack a déjà connu : struct.error: unpack requires a string argument of length 2.

    Je ne comprends vraiment pas : l'algo est bien le meme, et la taille des octets est bien la meme d'un systeme à un autre . (je suis sur architecture 32 bits)

    Les resultats sont vraiment bizarres, avec certains fichiers, j'en arrive meme a obtenir struct.error: unpack requires a string argument of length 9100!


    Est ce que quelqu'un aurait une idée simple que j'aurais omise?

    N'hésitez pas si vous avez besoin de compléments



    Et merci d'avance!

  2. #2
    Membre confirmé Avatar de airballman
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 256
    Par défaut
    Apres quelques recherches, il s'avère que je vais reponder a mon propre post.

    Windows, à l'inverse de mon linux, n'a pas le bon gout d'ouvrir les fichiers de donnees directement en binaire.
    Il a donc simplement fallu lui preciser en ouvrant le fichier en mode 'rb'

    Voila don cun post resolu, qui n'aura pas fait reflechir grand monde a part moi :p

  3. #3
    Membre Expert
    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
    Par défaut
    Ta question m’a intéressé mais n’étant pas compétent en module struct , je ne pouvais rien apporter de valable.

    Il se trouve que j’ai potassé ce module ce weekend, mais je n’ai pas encore compris de quoi il retourne.

    Si quelqu’un peut proposer des liens pour étudier le sujet , j’en serai fort satisfait.



    Et merci d’avoir pris la peine d’apporter la réponse à ta question.

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour eyquem,

    Je suppose que tu as déjà trouvé le manuel :

    http://docs.python.org/library/struct.html

    J'ai déjà utilisé struct pour développer une fonction de lecture directe d'un fichier dbase III (.dbf), sans passer par dbase. Connaissant la place des données dans le fichier, il n'est pas très compliqué de récupérer ces données dans des variables, grâce à struct.unpack. Le principe est d'utiliser une chaine de format qui décrit les données attendues. Cette chaine de format n'est cependant pas toujours facile à écrire (ça me fait un peu penser aux regex...). Et, bien entendu, il faut ouvrir le fichier en mode binaire ('rb'):

    http://python.jpvweb.com/mesrecettes.../lecture_dbase

    Tyrtamos

  5. #5
    Membre Expert
    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
    Par défaut
    Merci tyrtamos.


    Il faut que je me mette à étudier sérieusement les histoires d’encodage, de bytes, d’unicode et tutti quanti un de ces 4.

    À cette occasion je m’aiderai de ton site, parce j’ai remarqué plusieurs posts où tu proposais des codes impliquant ces sujets et qu’il me semble que tu as compris ces histoires un peu compliquées de façon assez approfondie et précise.



    Oui, j’ai bien trouvé le manuel. C’est justement la page à laquelle je ne comprends rien.





    Il me semble avoir compris qu’en mode ’b’, les flux entrant et sortant d’un fichier sont des bytes bruts, c’est à dire sans interprétation à quelque niveau que se soit.

    Par contre en mode ordinaire, il y a un ’bidule’ qui fait une analyse des flux et qui les transforme, en bytes s’il s’agit d’écrire dans un fichier, en caractères s’il s’agit de lecture. Ce bidule est une sorte “d’interpréteur’ de flux de fichier. D’ailleurs, c’est quoi ce ’bidule’ ? C’est un module spécialisé de l’interpréteur Python ?....

    En mode’b’, cet interpréteur serait désactivé. Pour écrire il faut alors connaître comment sont organisés les bytes dans le fichier, et cette connaissance se trouve dans un format descriptif du type des bytes dans le fichier.

    Pour lire, par contre, en admettant qu’il ne soit pas nécessaire, ou possible , de transformer les bytes en caractères pour donner des chaînes lisibles par un humain, on peut éventuellement se passer de la connaissance du format. .... ??




    Une question que je me pose aussi:

    est-ce qu’on peut écrire dans un fichier en mode ’wb’, éventuellement autre chose que des caractères, le refermer. Puis le réouvrir en mode ’w’ et écrire à nouveau des caractères ?




    Est-ce que tout ceci a un sens ou bien est-ce que je me plante totalement ?

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour eyquem.

    Je suis loin de maitriser les encodages! J'arrive le plus souvent à résoudre mes pb d'encodage en essayant des solutions jusqu'à ce que ça marche, mais ce n'est guère satisfaisant.

    Il m'arrive de me poser les mêmes questions que toi, aussi, je suis en train de creuser un peu le sujet pour répondre. Je ferai un tuto sur ce que j'ai trouvé, et j'en donnerai l'adresse ici. Laisse moi quelques jours.

    En attendant, il y a des sites qui disent des choses intéressantes sur le sujet, comme celui-ci:

    http://sebsauvage.net/python/charsets_et_encoding.html

    Tyrtamos

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

Discussions similaires

  1. methode unpack de la classe struct
    Par gnibailau dans le forum Général Python
    Réponses: 2
    Dernier message: 03/12/2012, 23h07
  2. [TP]Portage d'un encodeur MP3 Fortran en pur Pascal...
    Par Christophe Fantoni dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 04/07/2003, 17h34
  3. Unrecognized option -fnative-struct
    Par copyallright dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 01/05/2003, 12h25
  4. [Kylix] portage d'application kylix3
    Par lefort dans le forum EDI
    Réponses: 1
    Dernier message: 14/11/2002, 21h23
  5. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25

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