Saltar al contenido

escanear en Python

Esta es la contestación más completa que te podemos brindar, pero obsérvala pausadamente y valora si se adapta a tu trabajo.

Solución:

También está el parse módulo.

parse() está diseñado para ser lo contrario de format() (el más nuevo string función de formateo en Python 2.6 y superior).

>>> from parse import parse
>>> parse(' fish', '1')
>>> parse(' fish', '1 fish')

>>> parse(' fish', '2 fish')

>>> parse(' fish', 'red fish')

>>> parse(' fish', 'blue fish')

Cuando estoy en un estado de ánimo C, generalmente uso comprensiones zip y list para un comportamiento similar a scanf. Me gusta esto:

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

Tenga en cuenta que para cadenas de formato más complejas, necesita usar expresiones regulares:

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

Tenga en cuenta también que necesita funciones de conversión para todos los tipos que desee convertir. Por ejemplo, arriba usé algo como:

strtobool = lambda s: 'true': True, 'false': False[s]

Python no tiene un sscanf equivalente incorporado, y la mayoría de las veces tiene mucho más sentido analizar la entrada trabajando con el string directamente, usando expresiones regulares o usando una herramienta de análisis.

Probablemente más útil para traducir C, la gente ha implementado sscanfcomo en este módulo: http://hkn.eecs.berkeley.edu/~dyoo/python/scanf/

En este caso particular, si solo desea dividir los datos en función de varios caracteres divididos, re.split es realmente la herramienta adecuada.

Si te ha sido de ayuda este post, nos gustaría que lo compartas con otros entusiastas de la programación de este modo contrubuyes a extender nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *