scanf in python
Diez B. Roggisch
deets at nospam.web.de
Mon Jul 21 14:55:12 EDT 2008
AMD schrieb:
> Hello,
>
> I often need to parse strings which contain a mix of characters,
> integers and floats, the C-language scanf function is very practical for
> this purpose.
> I've been looking for such a feature and I have been quite surprised to
> find that it has been discussed as far back as 2001 but never
> implemented. The recommended approach seems to be to use split and then
> atoi or atof or to use regex and then atoi and atof. Both approaches
> seem to be a lot less natural and much more cumbersome than scanf. If
> python already has a % string operator that behaves like printf, why not
> implement either a %% or << string operator to behave like scanf, use
> could be like the followng:
>
> a, b, c = "%d %f %5c" %% "1 2.0 abcde"
>
> or
>
> a, b, c = "%d %f %5c" << "1 2.0 abcde"
>
> %% is closer to the % operator
>
> << seems more intuitive to me
>
> either of this methods seems to me much simpler than:
>
> lst = "1 2;0 abcde".split()
> a = int(lst[0])
> b = float(lst[1])
> c = lst[2]
>
> or even worse when using regular expressions to parse such simple input.
>
> I like python because it is concise and easy to read and I really think
> it could use such an operator.
>
> I know this has been discussed before and many times, but all previous
> threads I found seem to be dead and I would like to invite further
> investigation of this topic.
I'm pretty certain python won't grow an additional operator for this.
Yet you are free to create a scanf-implementation as 3rd-party-module.
IMHO the usability of the approach is very limited though. First of all,
the need to capture more than one input token is *very* seldom - nearly
all commandline-tools I know that do require interactive user-input
(like the linux kernel config tool) do so by providing either
line-by-line value entry (including defaults, something you can't do
with your approach), or even dialog-centric value entry with curses.
So - I doubt you will gather much momentum on this. Good luck though.
Diez
More information about the Python-list
mailing list