[Python-ideas] Rough draft: Proposed format specifier for a thousands separator (discussion moved from python-dev)

Eric Smith eric at trueblade.com
Thu Mar 12 10:33:54 CET 2009


Thanks for doing this, Raymond.

I don't have any comments on the specific proposals, yet. I'm still 
thinking it over. But here are a few comments.

Raymond Hettinger wrote:
 > Motivation:

You might want to mention the existing 'n' format type. I don't think 
it's widely known. It handles the odd cases of locales that have odd 
groupings, such as James Knight's example from India (1,00,00,00,000).

James: If you know the locale name for that, I'd like to know it. It 
would be handy for testing.

floats are not terribly useful for 'n', however:
 >>> format(1000000, 'n')
'1,000,000'
 >>> format(1000000.111111, 'n')
'1e+06'
 >>> format(100000.111111, 'n')
'100,000'

> Proposal I (from Nick Coghlan]:
>       A comma will be added to the format() specifier mini-language:
> 
>    [[fill]align][sign][#][0][minimumwidth][,][.precision][type]

Could you add the existing PEP-3101 specifier, just so we know what 
we're changing (and so that I don't have to look it up constantly!)?

[[fill]align][sign][#][0][width][.precision][type]

(As an aside, I copied this from 
http://docs.python.org/library/string.html#formatstrings, I just noticed 
that PEP 3101 differs in the name of the width/minwidth field.)

>    for hundreds or ten-thousands), but iIt comes at the expense of

Typo (iIt).

>   Also, it makes it
>    more challenging to write custom __format__ methods that follow the
>    format specification mini-language.

For this exact reason, I've always wanted to add a method somewhere that 
parses the mini-language. The code exists in the C implementation, it 
would just need to be exposed, probably returning a namedtuple with the 
various fields.

>    For the locale module, just the "T" is necessary in a formatting string
>    since the tool already has procedures for figuring out the actual
>    separators from the local context.

Is this needed at all? That is, having just the "T"? How is this 
different from using type=n? Having asked the question, I guess the 
answer is it lets you use it with the more useful float type=f.

> Comments and suggestions are welcome but I draw the line at Mayan
> numbering conventions ;-)

That's only a problem until December 21, 2012 anyway!

Eric.




More information about the Python-ideas mailing list