python:basico
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| python:basico [2022/04/04 17:06] – [Expresiones Regulares y patrones] alberto | python:basico [2025/08/02 02:14] (actual) – [Strings] alberto | ||
|---|---|---|---|
| Línea 43: | Línea 43: | ||
| Las variables que se declaren fuera de una función, tienen ámbito global. | Las variables que se declaren fuera de una función, tienen ámbito global. | ||
| - | Las variables que se declaran en el interior de una función tienen ámbito local y s´ñolo | + | Las variables que se declaran en el interior de una función tienen ámbito local y sólo existen mientras se ejecute esa función. |
| Dentro de una función se pueden usar variables globales anteponiendo **global**. | Dentro de una función se pueden usar variables globales anteponiendo **global**. | ||
| El uso de variables globales es desaconsejable. | El uso de variables globales es desaconsejable. | ||
| Línea 109: | Línea 109: | ||
| print(" | print(" | ||
| | | ||
| - | elif (A > B):; | + | elif (A > B): |
| print(" | print(" | ||
| | | ||
| Línea 128: | Línea 128: | ||
| Si fuese necesario, se pueden usar las sentencias: | Si fuese necesario, se pueden usar las sentencias: | ||
| - | * **break** Sale del bcle while | + | * **break** Sale del bucle while |
| * **continue** Pasa a la primera línea del interior del bucle while | * **continue** Pasa a la primera línea del interior del bucle while | ||
| Línea 167: | Línea 167: | ||
| <code python> | <code python> | ||
| - | def miFuncion('argumento1'=' | + | def miFuncion(argumento1=' |
| # ... | # ... | ||
| # ... | # ... | ||
| Línea 383: | Línea 383: | ||
| Permite el uso de las sentencias **in** y **not in**. | Permite el uso de las sentencias **in** y **not in**. | ||
| - | Se puede usar //string interpolation// | + | Se puede usar desde Python 3.6 con **// |
| - | + | ||
| - | <code python> | + | |
| - | name = ' | + | |
| - | age =4000 | + | |
| - | ' | + | |
| - | </ | + | |
| - | + | ||
| - | Desde Python 3.6 existen | + | |
| <code python> | <code python> | ||
| Línea 453: | Línea 445: | ||
| A través de expresiones regulares, se buscan patrones de texto. Las expresiones regulares son comúnmente llamadas // | A través de expresiones regulares, se buscan patrones de texto. Las expresiones regulares son comúnmente llamadas // | ||
| Las funciones regex se encuentran en la biblioteca de python **re**.\\ | Las funciones regex se encuentran en la biblioteca de python **re**.\\ | ||
| + | |||
| + | Las expresiones regulares pueden llegar a ser muy largas y complejas. se pueden usar las triples comillas simples **%%''' | ||
| === Claves de caracteres para crear expresiones regulares === | === Claves de caracteres para crear expresiones regulares === | ||
| Línea 465: | Línea 459: | ||
| === Símbolos para expresiones regulares === | === Símbolos para expresiones regulares === | ||
| + | * **?** //match// ninguna o una vez el grupo precedente. | ||
| + | * ***** //match// ninguna o más veces el grupo precedente. | ||
| + | * **+** //match// una o más veces el grupo precedente. | ||
| + | * **{n}** //match// exactamente n veces el grupo precedente. | ||
| + | * **{n,}** //match// n veces o más el grupo precedente. | ||
| + | * **{,m}** //match// de 0 a m veces el grupo precedente. | ||
| + | * **{n,m}** //match// de n a m veces el grupo precedente. | ||
| + | * **{n,m}?** ó ***?** ó **+?** //match// de la cadena más corta coincidente, | ||
| + | * **^**spam La cadena debe comenzar por spam para hacer //match//. | ||
| + | * spam**$** La cadena debe terminar por spam para hacer //match//. | ||
| + | * **.** //Match// cualquier carácter salvo nueva línea. **.*** Hace //match// cualquier string salvo el carácter nueva línea. Para que **.** también reconozca nueva línea, se pasa como segundo argumento a compile() re.DOTALL: newLineRegex=re.compile(' | ||
| + | * **[**abc**]** //Match// cualquier carácter de entre los corchetes. | ||
| + | * **[^**abc**]** //Match// cualquier carácter que no sea ninguno de los que se encuentran entre los corchetes. | ||
| + | |||
| + | En los carácteres entre corchetes se puede indicar varios caracteres seguidos según su código UNICODE, ejemplo: 0-9, a-z, A-Z, etc. Además, entre los corchetes no se utilizan escapes, todo lo que se ponga es tenido en cuenta automáticamente. | ||
| === Métodos para trabajar con expresiones regulares === | === Métodos para trabajar con expresiones regulares === | ||
| Para buscar en una cadena un patrón, debemos indicar dicho patrón como tipo de datos regex, para lo que se utilia la función **compile()**: | Para buscar en una cadena un patrón, debemos indicar dicho patrón como tipo de datos regex, para lo que se utilia la función **compile()**: | ||
| + | |||
| + | Para obviar mayúsculas y minúsculas se pasa a compile() como segundo argumento **re.IGNORECASE** o **re.I**. | ||
| Para buscar coincidencias se utiliza la función **search()**: | Para buscar coincidencias se utiliza la función **search()**: | ||
| Para obtener el string del tecto coincidente con el patrón coincidencia**.group()**. | Para obtener el string del tecto coincidente con el patrón coincidencia**.group()**. | ||
| - | |||
| Se puede agrupar resultados concretos de regex indicándolos con **(**...**)** en la expresión regular. Después podemos recuperarlos independientemente con **group(**n**)**. donde n es el número de grupo. Si el número de grupo es 0, devuelve todas las coincidencias.\\ | Se puede agrupar resultados concretos de regex indicándolos con **(**...**)** en la expresión regular. Después podemos recuperarlos independientemente con **group(**n**)**. donde n es el número de grupo. Si el número de grupo es 0, devuelve todas las coincidencias.\\ | ||
| Línea 478: | Línea 488: | ||
| Con **|**, se pueden indicar varias posibilidades de coincidencia, | Con **|**, se pueden indicar varias posibilidades de coincidencia, | ||
| + | El método **findall()** devuelve una lista de strings con todos los // | ||
| + | Con el método **sub()**, se pueden sustituir las coincidencias. | ||
| + | Se puede trabajar con el método sub() de dos formas: | ||
| + | - A partir del patrón especificado anteriormente: | ||
| + | nameRegex=re.compile(r' | ||
| + | nameRegex.sub(' | ||
| + | # Sustituye "Agent Alice" y "Agent Bob" en la cadena por " | ||
| + | </ | ||
| + | - Especificando el patrón en la propia función sub\\ re.sub(patron, | ||
| + | def dashrepl(matchobj): | ||
| + | ... if matchobj.group(0) == ' | ||
| + | ... else: return ' | ||
| + | >>> | ||
| + | ' | ||
| + | >>> | ||
| + | 'Baked Beans & Spam' | ||
| + | </ | ||
| ===== Validación de datos de entrada ===== | ===== Validación de datos de entrada ===== | ||
| + | Se usa la biblioteca pyinputplus, | ||
| + | |||
| + | <code python> | ||
| + | pip install --user pyinputplus | ||
| + | import pyinputplus as pyip # Se le puede definir un alias para no tener que escribir todo el nombre cada vez que se llama a uno de sus métodos. | ||
| + | </ | ||
| + | |||
| + | === Métodos de validación de datos === | ||
| + | Algunos de sus métodos: | ||
| + | * **inputstr()** Como input(), con las características de la biblioteca. Se puede indicar una función de validación personalizada. | ||
| + | * **inputNum()** Permite introducir un número y retorna un dato tipo int o float. | ||
| + | * **inputChoice()** Asegura que se introduce una de las opciones definidas. | ||
| + | * **inputMenu()** Asegura que se introduce una de las opciones definidas, que se encuentran ordenadas con letras o números. | ||
| + | * **inputDatetime()** Asegura que se introducce una fecha y hora. | ||
| + | * **inputYesNo()** Sobran las palabras. | ||
| + | * **inputBool()** Comprueba True o False. Devuelve otro booleano. | ||
| + | * **inputEmail()** Pues eso. | ||
| + | * **inputFilepath()** Asegura que se introduce una dirección y nombre de archivo válida, y opcionalmente comprueba si existe. | ||
| + | * **inputPassword()** Sin mostrar en pantalla los caracteres que se pulsan. Por defecto son sustituidos por *. | ||
| + | |||
| + | Las funciones inputNum(), inputInt() e inputFloat() aceptan una serie de argumentos (el primero es el texto a validar): | ||
| + | * **min** Número mínimo permitido. | ||
| + | * **max** Número máximo permitido. | ||
| + | * **greatherThan** Número mínimo permitido sin tenerlo en cuenta. | ||
| + | * **lessThan** Número máximo permitido sin contar el indicado. | ||
| + | * **blank**=True/ | ||
| + | |||
| + | === Intentos === | ||
| + | Se puede limitar el número de intentos si se introduce el dato de forma errónea, ya que en caso de no hacerlo, lo seguiría pidiendo indefinidamente. Se puede hacer con los argumentos opcionales: | ||
| + | * **limit**=n Número de intentos. Genera un error RetryLimitException | ||
| + | * **timeout**=m Número de segundos máximo para introducir un dato válido. Genera un error TimeoutException | ||
| + | |||
| + | Se manejan con Try-Except. | ||
| + | |||
| + | Si se indica el argumento **default: | ||
| + | |||
| + | Se pueden pasar regex con los argumentos: | ||
| + | * **allowRegexes**=[r' | ||
| + | * **blockRegexes**=[r' | ||
| + | |||
| + | allowRegexes sobreescribe a block si se especifican ambos y se pisan. | ||
| + | |||
python/basico.1649084785.txt.gz · Última modificación: por alberto
