ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> python-list
python-list
Re: scanf style parsing
by Richard Jones other posts by this author
Sep 26 2001 6:09AM messages near this date
Re: scanf style parsing | Re: scanf style parsing
On Wednesday 26 September 2001 15:42, Bruce Dawson wrote:
>  I love programming in Python, but there are some things I have not found
>  the easy way to do.

That's what we're here for :)


>  I understand that Python is supposed to be good at
>  text parsing, but I am having trouble with this simple task. Given this
>  text (the output from VisualC++) I want to find out how many errors and
>  warnings there were:
> 
>  smtpmail.exe - 0 error(s), 0 warning(s)
> 
>  In C/C++ that would be something like:
>  sscanf(buffer, "smtpmail.exe - %d error(s), %d warning(s)", &errors,
>  &warnings);
> 
>  It's not that I think the sscanf syntax is particularly elegant, but it
>  sure is compact! I saw the discussion about adding scanf to Python
> 
>  http://mail.python.org/pipermail/python-dev/2001-April/014027.html
> 
>  but I need to know what people do right now when faced with this task.

Right now, people use regular expressions, which are more flexible that 
sscanf, but don't do the type conversions (everything comes out as a string) 
and are a little more verbose, code-wise.

[richard@ike ~]% python
Python 2.1.1 (#1, Jul 20 2001, 22:37:24) 
[GCC 2.96 20000731 (Mandrake Linux 8.1 2.96-0.58mdk)] on linux-i386
Type "copyright", "credits" or "license" for more information.
> >> import re
> >> scan = re.compile(r'smtpmail.exe - (\d+) error\(s\), (\d+) warning\(s\)')
> >> result = scan.match("smtpmail.exe - 0 error(s), 0 warning(s)")
> >> errors, warnings = map(int, result.groups())
> >> errors
0
> >> warnings
0
> >> 

... or something similar. The RE can be made more flexible to allow, eg. the 
non-existence of the ", %d warning(s)" part:

> >> scan = re.compile(r'foo.exe - (\d+) error\(s\)(, (\d+) warning\(s\))?')
> >> result = scan.match("foo.exe - 0 error(s)")
> >> result.groups()
('0', None, None)
> >> result = scan.match("foo.exe - 0 error(s), 0 warning(s)")
> >> result.groups()
('0', ', 0 warning(s)', '0')

... and so on...



     Richard

-- 
http://mail.python.org/mailman/listinfo/python-list
Thread:
Bruce Dawson
Skip Montanaro
George Demmy
Hans-Peter Jansen
Quinn Dunkan
Tim Hammerquist
Ralph Corderoy
Toby Dickenson
Duncan Booth
Aahz Maruch
Aahz Maruch
Aahz Maruch
Stefan Schwarzer
Grant Edwards
Fredrik Lundh

Malcolm Tredinnick
Ralph Corderoy
Tim Hammerquist
Stefan Schwarzer
Greg Ewing
Skip Montanaro
Boyd Roberts
Steve Clift
Bruce Dawson
Tim Hammerquist
Tim Hammerquist
Tim Hammerquist
Skip Montanaro
Andrew Dalke
Fredrik Lundh
Oleg Broytmann
Andrei Kulakov
Duncan Booth
Chris Barker
Tim Hammerquist
Skip Montanaro
Jon Nicoll
Oleg Broytmann
Bruce Dawson
Skip Montanaro
Andrei Kulakov
Richard Jones
Skip Montanaro
Andrew Dalke

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved