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 :

formatage et conversion de nombres [Python 2.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Par défaut formatage et conversion de nombres
    Bonjour
    j'ai un fichier txt du genre :
    9A 89 EC 94 FF
    9A 88 E5 A5 FF
    9A 88 EA 96 FF
    9A 86 E9 A3 FF
    9A 88 FE 7C FF
    avec quelques 230000 lignes, dans lequel je veux supprimer les FF de fin de ligne, convertir les nombres en decimal et enregistrer dans un nouveau fichier texte.Je compte utiliser matplotlib pour créer un visuel. J'ai essayé des trucs du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import numpy as np
    f = open('/Users/yvanvojvoda/Desktop/PYTHON/fusex/Telem_Laika/file_out_reduit.txt', 'r')
    alist = f.readlines()
    for line in alist:    
            v1 = np.array(line)
            hexa1 = np.asscalar(v1)
            dec1 = int(hexa1,16)
            x = str(dec1)
            print x
    mais... marche pô HELP !

    Quelqu'un a une idée ?

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

    numpy loadtxt est un joli joujou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> converters = { x: lambda s: int(s, 16) for x in range(4) }
    >>> np.loadtxt('data.txt', delimiter=' ', usecols=range(4), dtype='int32', converters=converters)
    array([[154, 137, 236, 148],
           [154, 136, 229, 165],
           [154, 136, 234, 150],
           [154, 134, 233, 163],
           [154, 136, 254, 124]])
    >>>
    mais comme tous les joujoux compliqués, sans lire la documentation...

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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    numpy loadtxt est un joli joujou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> converters = { x: lambda s: int(s, 16) for x in range(4) }
    >>> np.loadtxt('data.txt', delimiter=' ', usecols=range(4), dtype='int32', converters=converters)
    array([[154, 137, 236, 148],
           [154, 136, 229, 165],
           [154, 136, 234, 150],
           [154, 134, 233, 163],
           [154, 136, 254, 124]])
    >>>
    mais comme tous les joujoux compliqués, sans lire la documentation...

    - W
    mais comment t'envoie ca dans un fichier texte ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 739
    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 739
    Par défaut
    Citation Envoyé par vyvan Voir le message
    mais comment t'envoie ca dans un fichier texte ?
    Avec la fonction np.savetxt... Et ce coup ci je vous laisse le temps d'essayer de lire/comprendre la documentation.

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

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Par défaut
    Merci je v voir de plus près...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Par défaut
    merci wiztricks je vais voir la doc de plus près

  7. #7
    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
    Voilà le code corrigé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    with open("fsrce.txt", 'r') as f1, open("fdest.txt", 'w') as f2:
        for ligne in f1:
            ligne = ligne.rstrip() # élimination de la fin de ligne
            if ligne!="":
                ligne = ligne[:-3] # élimination du " FF" de fin de chaine
                nbs = [str(int(nb, 16)) for nb in ligne.split(' ')]
                ligne = ' '.join(nbs)
                f2.write(ligne +"\n") # écriture dans le nouveau fichier
    Ce qui donne pour le fichier destination:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    154 137 236 148
    154 136 229 165
    154 136 234 150
    154 134 233 163
    154 136 254 124
    On peut bien sûr mettre le séparateur qu'on veut au lieu de l'espace.

    Mais je pense que la solution avec numpy est plus élégante.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Par défaut
    ca maaaaaaaaaaaaarche !!! yeah. Merci Tyrtamos

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Par défaut
    t toujours là tyrtamos ?

  10. #10
    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,

    Voilà un petit code qui a l'air de faire le boulot mais sans numpy. J'ai décomposé les opérations ligne par ligne mais on peut les regrouper:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    with open("fsrce.txt", 'r') as f1, open("fdest.txt", 'w') as f2:
        for ligne in f1:
            ligne = ligne.rstrip() # élimination de la fin de ligne
            if ligne!="":
                ligne = ligne[:-3] # élimination du " FF" de fin de chaine
                ligne = ligne.replace(' ', '') # suppression des espaces
                nb = int(ligne, 16) # conversion en base 10
                f2.write(str(nb)+"\n") # écriture dans le nouveau fichier
    Résultat: En partant du fichier source:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    9A 89 EC 94 FF
    9A 88 E5 A5 FF
    9A 88 EA 96 FF
    9A 86 E9 A3 FF
    9A 88 FE 7C FF
    On obtient le fichier destination:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    2592730260
    2592662949
    2592664214
    2592532899
    2592669308

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Bonjour,

    Voilà un petit code qui a l'air de faire le boulot mais sans numpy. J'ai décomposé les opérations ligne par ligne mais on peut les regrouper:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    with open("fsrce.txt", 'r') as f1, open("fdest.txt", 'w') as f2:
        for ligne in f1:
            ligne = ligne.rstrip() # élimination de la fin de ligne
            if ligne!="":
                ligne = ligne[:-3] # élimination du " FF" de fin de chaine
                ligne = ligne.replace(' ', '') # suppression des espaces
                nb = int(ligne, 16) # conversion en base 10
                f2.write(str(nb)+"\n") # écriture dans le nouveau fichier
    Résultat: En partant du fichier source:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    9A 89 EC 94 FF
    9A 88 E5 A5 FF
    9A 88 EA 96 FF
    9A 86 E9 A3 FF
    9A 88 FE 7C FF
    On obtient le fichier destination:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    2592730260
    2592662949
    2592664214
    2592532899
    2592669308
    je comprends pas bien le 9A en hexa ça doit donner 154...

  12. #12
    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
    Citation Envoyé par vyvan Voir le message
    je comprends pas bien le 9A en hexa ça doit donner 154...
    Peut-être n'ais-je pas bien compris le problème, mais:

    Avec la ligne "9A 89 EC 94 FF":

    "9A 89 EC 94 FF" => "9A89EC94":
    int("9A89EC94", 16) => 2592730260
    hex(2592730260).upper() => 0X9A89EC94

    ???

    [edit]: Ah il ne fallait pas supprimer les espaces et garder les 4 entiers par ligne: ok. Je modifie mon code.

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

Discussions similaires

  1. Fonction de conversion de nombre en lettres
    Par david_chardonnet dans le forum Langage
    Réponses: 21
    Dernier message: 08/12/2021, 17h51
  2. Fonction de conversion de nombre réel en text
    Par hakim81 dans le forum Delphi
    Réponses: 2
    Dernier message: 05/02/2007, 14h55
  3. conversion dun nombre en chaine de caractère?
    Par franco82 dans le forum C++
    Réponses: 8
    Dernier message: 30/11/2006, 19h05
  4. [ASA]Conversion de nombres decimaux en toute lettre
    Par Fab_57 dans le forum Sybase
    Réponses: 1
    Dernier message: 22/08/2006, 14h49
  5. Conversion de nombres
    Par moonia dans le forum Langage
    Réponses: 2
    Dernier message: 17/01/2006, 11h09

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