El sitio web de tnotstar

Librería estándar de Python

Módulo argparse

Sinopsis

Uso

  1. Crear un objeto ArgumentParser (e.g. parser).
  2. Configurar la sintaxis de la línea de comandos (e.g. add_argument).
  3. Utilizar el objeto parser para la creación de un objeto Namespace (e.g. args), haciendo una llamada al método parse_args().
  4. Utilizar el objeto args para consultar los valores obtenidos de los parámetros.

Ejemplos

Código mínimo

from argparse import ArgumentParser

parser = ArgumentParser()

args = parser.parse_args()

Añadiendo argumentos posicionales

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument("foo")
parser.add_argument("bar")

args = parser.parse_args()

Añadiendo textos de ayuda a los argumentos

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument("foo", help="one argument")
parser.add_argument("bar", help="other argument")

args = parser.parse_args()

Fuentes

Módulo asyncio

Sinopsis

APIs de alto nivel

Las APIs de alto nivel proporcionan mecanismos para:

APIs de bajo nivel

Las APIs de bajo nivel proporcionan mecanismos para:

Ejemplos

Esperar un segundo antes de terminar una tarea

import asyncio

async def main():
    print("Hello...")
    await asyncio.sleep(1)
    print("...world!")

if __name__ == "__main__":
        asyncio.run(main())

Recuperar el bucle de eventos actualmente en uso

import asyncio

loop = asyncio.get_event_loop()

Fuentes

Módulo cmd

Sinopsis

Uso

  1. Crear una subclase de Cmd.
  2. Las instancias de las subclases de Cmd actuarán como framework para el intérprete.
  3. Los parámetros opcionales del constructor, sirven para controlar la E/S y el soporte a las facilidades de readline.

Ejemplos

Creación de la subclase de Cmd

import cmd

class MyCmd(cmd.Cmd):
    def do_hello(self, arg):
        if arg:
            print("Hello, {}!".format(arg))
        else:
            print("Hello, world!")

Instanciación de la subclase de Cmd

if __name__ == "__main__":
    MyCmd().cmdloop()

Fuentes

Módulo ctypes

Sinopsis

Uso

Carga de librerías de enlace dinámico

  1. El paquete ctypes exporta los objetos cdll y, ―en Windows― windll y oledll, con los que se puede cargar las librerías de enlace dinámico.

Ejemplos

Importar la librería kernel32.dll de Windows

import ctypes as ct
print(ct.windll.kernel32)

Fuentes

Módulo pathlib

Sinopsis

Uso

Ante la duda, podremos utilizar la clase Path que permite abstraernos de la implementación concreta subyacente.

Crear una instancia de una ruta o nombre de fichero a partir de una cadena de caracteres

El constructor de la clase Path puede recibir una o más cadenas de caracteres, que sirvan para especificar el valor inicial de cada objeto de la clase:

from pathlib import Path
p = Path("/some/place", "to/find")

Ejemplos

Inicialización común para todos los ejemplos de esta sección:

> from pathlib import Path
> p1 = Path(r"C:\Windows\System\..\System32\Drivers\etc\hosts.ics")

Obtener la ruta como una cadena de caracteres

> str(p1)

Similar a os.path.normpath

> p1.absolute()

Similar que os.path.abspath

> p1.resolve()

Emular os.path.basename

> p1.name

Emular os.path.dirname

> p1.parent

Fuentes

Módulo shelve

Sinopsis

Uso

Simplemente se abre la base de datos dbm subyacente; posiblemente, utilizando para ello un gestor de contexto (context manager). Y se utiliza como un diccionario cualquiera. También podremos sincronizar la escritura de los cambios al disco.

Ejemplos

Crear un almacenamiento persistente y escribir un valor

import shelve

with shelve.open("cached.db") as cached:
    cached["joe"] = {
        "name": "Joe Herrera",
        "age": 19
        "mantra": "Uh, la la la, ..."
    }

Abrir un almacenamiento persistente y leer un valor

import shelve

with shelve.open("cached.db") as cached:
    value = cached["joe"]

print(value)

Abrir un almacenamiento persistente con soporte a retroescritura (writeback)

La retroescritura se utilizará cuando hagamos cambios sobre los valores insertados, y queramos que dichos cambios se actualicen en el disco. Dicho modo está desactivado por omisión.

import shelve

with shelve.open("cached.db", writeback=True) as cached:
    cached["joe"]["age"] += 1

Fuentes

Módulo smtplib

Sinopsis

Uso

El módulo smtplib define la clase SMTP (aparte de varias otras excepciones y funciones de utilidad) que implementa un cliente SMTP. Para enviar un correo-e a través de un servidor SMTP no seguro, se debe ejecutar la siguiente secuencia de pasos:

  1. Crear una instancia de la clase SMTP.
  2. Invocar el método sendmail con los parámetros necesarios para enviar el mensaje.
  3. Invocar el método quit antes de finalizar la conversación.

La clase SMTP_SSL permite abrir conexiones seguras desde el comienzo, mientras que para el caso de la SMTP, las conexiones se abren en modo inseguro para después ser actualizadas (upgraded) a modo seguro mediante la llamada al método starttls().

Ejemplos

Abrir una conexión insegura y enviar un mensaje simple

import smtplib

from_addr = "my_address@example.com"
to_addr = "your_address@example.com"
msg_text = "Hello, world!"

try:
    smtp = smtplib.SMTP("smtp.gmail.com", 587)
    smtp.sendmail(from_addr, to_addr, msg_text)
    smtp.quit()
except:
    print("Oops: something is wrong")

Abrir una conexión insegura y actualizarla a modo seguro

import smtplib

try:
    smtp = smtplib.SMTP("smtp.gmail.com", 587)
    smtp.ehlo()
    smtp.starttls()
    smtp.quit()
except:
    print("Oops: something is wrong")

Abrir una conexión segura desde el inicio

import smtplib

try:
    smtp = smtplib.SMTP_SSL("smtp.gmail.com", 587)
    smtp.ehlo()
    smtp.quit()
except:
    print("Oops: something is wrong")

Fuentes

Módulo subprocess

Sinopsis

Uso

Interfaz básica

A partir de la versión 3.5 de Python, se puede trabajar en modo simplificado usando la función run, que funcionará en la mayoría de los casos.

Nota: Para los casos no contemplados por run, existe una interfaz avanzada basada en el constructor Popen.

  1. Invocar la función run
  2. TODO

Ejemplos

TODO

Fuentes

Módulo tempfile

Sinopsis

Uso

Con gestión automática de recursos

  1. Crear una instancia de una de las clases TemporaryFile, NamedTemporaryFile o SpooledTemporaryFile.
  2. Utilizar los métodos tipo fichero asociados a las clases anteriores.
  3. Cerrar el objeto mediante su método close() o encerrar dentro de un gestor de contexto.

Ejemplos

TODO

Fuentes

Módulo zipfile

Sinopsis

Uso

  1. Crear una instancia de la clase ZipFile.
  2. Usar los métodos de la clase ZipFile para:
    • Obtener una lista con la información de los miembros del archivo.
    • Recuperar la información de un miembro de nuestro archivo.
    • Acceder a los miembros del archivo de manera individual.
    • Leer, escribir o extraer miembros del archivo.
  3. Cerrar el archivo o utilizar un gestor de contexto para esto.

Ejemplos

Leer los nombres de los miembros de un archivo .ZIP

from zipfile import ZipFile


with ZipFile("example.zip") as zip:
    for name in zip.namelist():
        print(name)

Obtener un objeto tipo fichero de un miembro dado del archivo

from zipfile import ZipFile

with ZipFile("example.zip") as zip:
    with zip.open("example1.txt") as input:
        for line in input:
            print(line.decode())

Leer todo el contenido de un miembro dado del archivo

from zipfile import ZipFile

with ZipFile("example.zip") as zip:
    buffer = zip.read("spanish/example2.txt")
    print(buffer.decode())

Leer un miembro dado del archivo en modo texto (con una codificación dada)

from io import TextIOWrapper
from zipfile import ZipFile

with ZipFile("example.zip") as zip:
    with TextIOWrapper(zip.open("data.csv"), encoding="utf-8-sig") as input:
        for line in input:
            print(line)

Fuentes