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 :

Mise en forme


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut Mise en forme
    Bonjour,

    J'ai un problème de mise en forme. Je souhaite avoir 5 262 et j'ai 5?262. Voici le code que j'utilise pour la mise en forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/usr/bin/env python
    #-*- coding: utf8 -*-
    .....
    totCompDay = locale.format("%d",totCompDay, grouping=True)
    En fait le résultat obtenu dépend de la machine sur lequel je lance le script.

    Comment faire pour avoir le bon format quelque soit la machine ?

    Merci de votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    ajoutes un truc avant, genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    locale.setlocale(locale.LC_NUMERIC, 'fr_FR.UTF-8')
    pour set avec quelle locale tu veux bosser.

  3. #3
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Tu as peut-être également un problème de police…

    En effet, en typographie, l’espace qui sépare les groupes de chiffres par trois est au minimum une espace insécable, voire une espace fine (0xE2 0x80 0x8A en UTF-8)… Et suivant la machine, il est possible que la police utilisée par la console ne reconnaisse pas ces caractères (les caractères inconnus d’une police sont souvent remplacés par un ? ).

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut
    Merci pour ces réponses.

    J'ai inséré le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    locale.setlocale(locale.LC_NUMERIC, 'fr_FR.UTF-8')
    mais j'ai un message d'erreur :
    locale.setlocale(locale.LC_NUMERIC, 'fr_FR.UTF-8')
    File "C:\Python26\lib\locale.py", line 513, in setlocale
    return _setlocale(category, locale)
    Error: unsupported locale setting
    Lorsque j'utilise la console j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> locale.setlocale(locale.LC_ALL, '')
    'French_France.1252'
    Merci de votre aide.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    ben alors c'est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    locale.setlocale(locale.LC_NUMERIC, 'French_France.1252')
    mais c'est pas vraiment àça que ça sert locale ...
    pourquoi tu ne formattes pas toi-même le string ?

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut
    ... parceque je ne sais pas comment faire

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def foo(n):
        n = str(n)
        c=[]
        while n:
            c.insert(0,n[-3:])
            n = n[:-3]
        return ' '.join(c)
     
    print foo(1234567890)
     
    1 234 567 890

  8. #8
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 417
    Points : 826
    Points
    826
    Par défaut
    Pour le fun, une version utilisant les list comprehension
    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
    17
    18
    19
    20
     
    num=12345678900
    print ' '.join([n[::-1] for n in [str(num)[::-1][i:i+3] for i in range(0,len(str(num)),3)]][::-1])
    #           6     5        4           2                    1                                3
    #           |     |        |           |                    |                                |
    #           |     |        |           |                    |       On inverse les paquets <-|
    #           |     |        |           |                    |       pour obtenir 21 543 876 009
    #           |     |        |           |                    |-> i va de 3 en 3 sur toute la longueur
    #           |     |        |           |                    |   du nombre transformé en chaine
    #           |     |        |           |-> Transforme le nombre en chaîne
    #           |     |        |           |   [::-1]  retourne la chaine ainsi obtenue
    #           |     |        |           |   [i:i+3] prend les 3 caractères à partir de l'indice i
    #           |     |        |           |   La liste renvoyée est donc composée de paquets de 3 chiffres
    #           |     |        |           |   inversés (ici 009 876 543 21)
    #           |     |        |-> Récupère chaque paquet de 3 créé dans la liste décrite ensuite
    #           |     |-> Retourne les éléments de la liste pour avoir les paquets de 3 chiffres
    #           |     |   dans le bon ordre 12 345 678 900
    #           |-> Contatène les différents élements de la liste avec des ' '
     
    > 12 345 678 900

  9. #9
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Chic, un romain une question "vendredi" !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> fmt = lambda n:''.join(map(lambda(i,c):"%s%s" % ('' if not i or (len(str(n))-i) % 3 else ' ',c),enumerate(str(n))))
    >>> fmt(1)
    '1'
    >>> fmt(12)
    '12'
    >>> fmt(123)
    '123'
    >>> fmt(1234)
    '1 234'
    >>> fmt(12345)
    '12 345'
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

Discussions similaires

  1. [CR] mise en forme d'un champs texte en fonction des données
    Par niPrM dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 29/06/2004, 11h57
  2. [CR 9] Mise en forme non affichée when null
    Par Yorglaa dans le forum Formules
    Réponses: 2
    Dernier message: 28/06/2004, 17h27
  3. mise en forme rapide d'applets
    Par appletj dans le forum Applets
    Réponses: 11
    Dernier message: 03/06/2004, 13h28
  4. Mise en forme HTML
    Par Regis.C dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 25/04/2004, 11h55
  5. Mise en forme fichier avant Import
    Par jeff37 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/04/2004, 15h16

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