sscanf in Python
Question: I'm looking for an equivalent to `sscanf()` in Python. I want to parse
`/proc/net/*` files, in C I could do something like this:

    
    
    int matches = sscanf(
            buffer,
            "%*d: %64[0-9A-Fa-f]:%X %64[0-9A-Fa-f]:%X %*X %*X:%*X %*X:%*X %*X %*d %*d %ld %*512s\n",
            local_addr, &local_port, rem_addr, &rem_port, &inode);
    

I thought at first to use `str.split`, however it doesn't split on the given
characters, but the `sep` string as a whole:

    
    
    >>> lines = open("/proc/net/dev").readlines()
    >>> for l in lines[2:]:
    >>>     cols = l.split(string.whitespace + ":")
    >>>     print len(cols)
    1
    

Which should be returning 17, as explained above.

Is there a Python equivalent to `sscanf` (not RE), or a string splitting
function in the standard library that splits on any of a range of characters
that I'm not aware of?


Answer: When I'm in a C mood, I usually use zip and list comprehensions for scanf-like
behavior. Like this:

    
    
    input = '1 3.0 false hello'
    (a, b, c, d) = [t(s) for t,s in zip((int,float,bool,str),input.split())]
    print (a, b, c, d)
    

Note that for more complex format strings, you do need to use regular
expressions:

    
    
    import re
    input = '1:3.0 false,hello'
    (a, b, c, d) = [t(s) for t,s in zip((int,float,bool,str),re.search('^(\d+):([\d.]+) (\w+),(\w+)$',input).groups())]
    print (a, b, c, d)
    

