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 :

Conversion de nombre


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Par défaut Conversion de nombre
    Bonjour,
    Voici ma difficulté
    Je lis un fichier texte contenanant des lignes de 3 chiffres:
    1.78888e+001, 9.78894e+002, 5.44444e+001
    8.77777e+002, 5.55555e+001, 8.88888e+001
    ...
    et j'aimerais que ces lignes deviennent:
    17.888, 978.894, ....
    c'est à dire ne plus ecrire ces chiffres en scientifique et effecteur donc la multiplication.
    je sais utiliser readlines mais ici j'aimerais lire nombre par nombre et utiliser la fonction replace('e+001',nombre*10) ect .

    Soit comment lire les lignes n'ont pas comme une chaine de caractere mais comme 3 nombre ou on peut effectuer une operation.
    merci
    snatsch

  2. #2
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    bonjour,

    essaye ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    fichier = open('monfichier')
    for ligne in fichier:
        for nb in ligne.split(','):
            print float(nb)

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

    En lisant le fichier, tu récupères chaque ligne sous forme de chaine de caractère (après avoir supprimé la fin de ligne avec rstrip):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne = "1.78888e+001, 9.78894e+002, 5.44444e+001"
    Pour pouvoir faire des calculs avec les nombres, il faut les convertir en 'float' (type de nombres réels avec un point décimal). Par exemple, pour en avoir la liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nbs = [float(x) for x in ch.split(',')]
    print nbs
    [17.8888, 978.894, 54.4444]
    Tyrtamos

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Par défaut
    Bonjour, et merci pour votre aide
    toutes vos solutions marchent
    mais
    je dois reécrire ces lignes dans un fichier texte et pour cela je dois les convertir en string. le probleme c'est que ca me met le résultat sur une seule ligne. si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    donne=open('virguletest.txt','r')
     dst=open('ouou.txt','w')
     brut=donne.readlines()
     i=0
    while i<2:
    	nbs=[float(x) for x in brut[i].split(',')]
    	dst.write(str(nbs))
    	i=i+1
    j'ai essayé de rajouter \n pour aller a la ligne mais ca fonctionne pas
    Pour resumer j'espere avoir:
    7.888, 978.894, x
    x, x, x
    ....
    merci
    snatsch

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Salut,

    Comme ça, par exemple :

    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
     
    l = []
    try:
        with open('virguletest.txt','r') as orig:
            for line in orig.readlines():
                nb = []
                for n in line.split(","):
                    nb.append(eval(n))
                l.append(nb)
     
        with open('ouou.txt','w') as dest:
            for n in l:
                chain =", ".join([str(x) for x in n])
                dest.write(chain + "\n")
    except IOError, why:
        print "Marche pas ton truc %s" % why
    Note : with open fermera le fichier y compris en cas d'erreur, c'est donc une bonne habitude à prendre.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    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 695
    Par défaut on garde les lignes.
    Juste pour le fun de passer par des générateurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import io
    import sys
     
    lines = u"""\
    1.78888e+001, 9.78894e+002, 5.44444e+001
    8.77777e+002, 5.55555e+001, 8.88888e+001
    """
     
    with io.StringIO(lines) as filein, sys.stdout as fileout:
        items = (line.split(',') for line in filein)
        floats = (map(float, s) for s in items) 
        for it in floats:
            fileout.write( ','.join(str(f) for f in it) + '\n')
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Bonjour,

    Ca coince :

    vincent@tiemoko:~/Bureau$ python test.py
    File "test.py", line 9
    with io.StringIO(lines) as filein, sys.stdout as fileout:
    ^
    SyntaxError: invalid syntax
    J'ai pas trouvé mieux que ça :

    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
     
    import io
    import sys
     
    lines = u"""\
    1.78888e+001, 9.78894e+002, 5.44444e+001
    8.77777e+002, 5.55555e+001, 8.88888e+001
    """
     
    with io.StringIO(lines) as filein: 
        with sys.stdout as fileout:
            items = (line.split(',') for line in filein)
            floats = (map(float, s) for s in items) 
            for it in floats:
                fileout.write( ', '.join(str(f) for f in it) + '\n')
    Etrangement, j'ai voulu vérifier dans la doc, le mot "with" ne retourne aucun résultat, ni les variantes "with open", etc...

    Et dans les built-in :
    http://docs.python.org/library/functions.html?
    "with" est introuvable.

    La doc est réduite le dimanche ?

    edit: le pointeur d'erreur se trouve normalement en dessous de la virgule.

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    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 695
    Par défaut
    Salut,
    Normalement le "with xxx, yyy" n'est supporté qu'à partir de 3.1 et de 2.7.
    Je ne sais pas s'il est backporté en 2.6.n.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Par défaut re
    Bonjour, votre aide m'a été bien utile
    j'ai un dernier probleme
    quand je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    orig= open('virguletest.txt','r')
    >>> dest= open('ouou.txt','w')
    >>> brut= orig.readlines()
    >>> l=[]
    >>> for line in brut:
    	nb=[]
    	for n in line .split(','):
    		nb.append(eval(n))
    		l.append(nb)
    avec le fichier virguletest contenant 2 lignes
    cela donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print(l)
    [[17.8888, 9.78894, 54.4444], [17.8888, 9.78894, 54.4444], [17.8888, 9.78894, 54.4444], [877.777, 55.5555, 88.8888], [877.777, 55.5555, 88.8888], [877.777, 55.5555, 88.8888]]
    soit trois fois le résultat.et cela va de même quand je l'écris dans mon fichier.
    es l'initialisation des listes qui n'est pas fait au bon endroit,j'ai pourtant essayé de les bouger, ou autre
    merci
    snatsch

  10. #10
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Meuh non, hein

    Tu as indenté une ligne trop loin.

    Dans mon exemple c'est comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for line in orig.readlines():
                nb = []
                for n in line.split(","):
                    nb.append(eval(n))
                l.append(nb)              # cette ligne ci
    Sinon l.append est exécuté autant de fois que de nombre par ligne.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Par défaut Jobs done
    Merci mon problème est résolu
    snatsch

+ 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