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 :

De Pascal à Python [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Par défaut De Pascal à Python
    Bonjour,

    Je m'intéresse depuis peu à Python. J'ai trouvé en bibliothèque des livres sur le sujet et j'ai aussi pas fouiné sur le net pour trouver des réponses à deux problèmes.

    Je viens du Pascal que je connais bien mais la traduction en python me dépasse.

    1)
    Je définis une combinaison comme un array=[1..5] of byte, ce qui représente 5 octets.
    J'ai un fichier constitué de 1 906 884 combinaisons soit un fichier de 9 534 420 octets.
    Comment lire ce fichier?
    Est il plus judicieux de le placer dans un liste ou un tuple voire un array comme défini par numpy?

    Comment le récrire à partir de la liste ou du tuple ou de l'array pour qu'il fasse exactement le nombre d'octets initial?

    2)

    Par ailleurs j'ai un fichier paramètres de 99 octets constitué de chaines de caractères codé de la sorte

    Str1 à str9: string[8] que Pascal code sur 9 octets (soit 81 octets)
    str10 : string[10] codé sur 11 octets
    str11 : string[11] codé sur 7 octets

    Comment lire et écrire cette structure?

    Merci par avance pour vos réponses.

    Deb.

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

    Avec Pascal comme C, l'accès à la mémoire se fait à assez bas niveau puisqu'on peut décrire des struct ou des records qui permettent d'accéder jusqu'au bit. Avec Python, c'est une autre histoire puisque vous n'accédez qu'à des objets et très indirectement au contenu de la mémoire.
    Dans la pratique, pour arriver à accéder à ce type d'information, il faut passer par des bibliothèques (écrites en C) qui vont "fabriquer" des objets Python à partir de ces données brutes.

    Pour le premier cas, le plus simple est de passer par numpy.
    Si le fichier contient: b'1234512345123451234512345' i.e. 5 fois 5 de vos octets. On pourra les lire en écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> a = np.fromfile(f, dtype=np.byte)
    >>> a
    array([49, 50, 51, 52, 53, 49, 50, 51, 52, 53, 49, 50, 51, 52, 53, 49, 50,
           51, 52, 53, 49, 50, 51, 52, 53], dtype=int8)
    Et les écrire aussi simplement via a.tofile('test2.dat')

    Pour le deuxième cas, j'utiliserais plutôt le module struct.
    Exemple on prend 10 bytes et on les découpe en 3 chaines de caractères de longueur 2, 3 et 5:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> s = b'0123456789'
    >>> struct.unpack('2s3s5s', s)
    (b'01', b'234', b'56789')
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Par défaut
    Bonsoir,

    Tout d'abord merci pour votre réponse.
    Je comprends l'utilisation de struct ainsi que le code que vous me donnez en exemple.

    Par contre pour le premier problème que je soumettais, la solution ne me paraît pas juste.
    Vous prenez l'exemple d'un fichier b'1234512345123451234512345'

    et le résultat obtenu est un
    array([49, 50, 51, 52, 53, 49, 50, 51, 52, 53, 49, 50, 51, 52, 53, 49, 50,
    51, 52, 53, 49, 50, 51, 52, 53], dtype=int8)

    qui contient des char au lieu de nombres.

    si au lieu des chiffres de 1 à 5, le fichier contenait aussi des numéros supérieur à 10...

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Citation Envoyé par debutant_virtuel Voir le message
    ...
    Par contre pour le premier problème que je soumettais, la solution ne me paraît pas juste.
    Vous prenez l'exemple d'un fichier b'1234512345123451234512345'

    et le résultat obtenu est un
    array([49, 50, 51, 52, 53, 49, 50, 51, 52, 53, 49, 50, 51, 52, 53, 49, 50,
    51, 52, 53, 49, 50, 51, 52, 53], dtype=int8)

    qui contient des char au lieu de nombres.

    si au lieu des chiffres de 1 à 5, le fichier contenait aussi des numéros supérieur à 10...
    Je me contente de vous montrer les outils que vous pourriez apprendre à utiliser pour construire la solution à votre problème.

    Ce que vous appelez "chiffre", par exemple "1" est le caractère qui s'affiche "1" et qui correspond un entier dans 0..255 (un octet) dont la valeur est 49 - et c'est un "numéro" supérieur à 10.

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

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Par défaut
    Merci pour votre réponse.
    Je considère donc la question comme résolue.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/06/2011, 14h04
  2. Réponses: 101
    Dernier message: 07/03/2010, 02h55
  3. Pascal, Python ?
    Par voxan16 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 29/06/2009, 23h27
  4. triangle pascal en python
    Par info! dans le forum Général Python
    Réponses: 27
    Dernier message: 19/04/2009, 19h25
  5. Réponses: 2
    Dernier message: 27/03/2007, 23h12

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