Indice
Nota de los Autores
Primeros Pasos
- Introducción
- Instalación
- Intérprete en línea
- Iniciar sesión.
- Finalizar sesión.
- Ejecutar sentencias
- Ejecutar bloques o secuencias de sentencias
- Realizar cálculos
- Sesiones de ayuda
- Instalación y configuración del editor Geany
- Convertir un programa en ejecutable
- Codificación (encoding)
- Incluir comentarios en el código
Palabras reservadas. Variables. Cadenas
- Palabras reservadas de Python
- Declarar variables
- Variable especial _
- Cadenas crudas: raw
- Operaciones básicas con variables
- Operadores aritméticos
- Operadores binarios
- Operadores de comparación o relacionales
- Operadores lógicos
- Control del flujo: if
- Control del flujo con bucles: while
- Control del flujo con bucles: for...in
- Listas
- Tuplas
- Operaciones con cadenas y listas
- Operaciones con cadenas y tuplas
- Diccionarios o matrices asociativas
- Operaciones con diccionarios
- Recorrer secuencias y diccionarios con for...in
- Recorrer rangos con for...in range()
- Operadores para secuencias: in, not in, is, is not
- Conjuntos: set
- Operaciones con conjuntos
- Un poco de historia
- Cadenas Unicode, Byte y Bytearray
- Declarar y convertir cadenas
- Codificación de archivos de texto
- Introducir datos de distinto tipo
- Introducir datos con captura de errores (excepciones)
- Introducir datos con captura de errores en bucle
- Introducir fechas y horas con captura de errores
Las cadenas f
- Formateo basado en %, en str.format() y string.Template()
- Las cadenas de formato f
- Recomendaciones de PEP 8
- Convenciones de nombres
- Diseño
- Líneas de código
- Codificación
- Líneas en blanco
- Sangría
- Comentarios
- Espacios en blanco
- Otras recomendaciones
- Herramientas para revisar y corregir
- Aplicar formatos con códigos ANSI
- El módulo Colorama
- Aplicar formatos con Colorama
- Desplazar el cursor antes de dar formato
- Excepciones
- Excepciones a medida
- De obligado cumplimiento: assert
- Funciones con un número fijo de parámetros
- Funciones con un número variable de parámetros
- Funciones con parámetros con valores por defecto
- Funciones con todos los parámetros con valores por defecto
- Funciones con parámetros que contienen diccionarios
- Funciones que devuelven más de un valor
- Funciones sin return
- Funciones generadas a partir de otras
- Iteradores
- La función iter()
- Implementando una clase para iterar cadenas
- La función range()
- Generadores
- Documentando el código
- Ver la documentación en la consola
- Guardar la documentación en formato HTML
- Buscar documentación indicando una palabra clave
- Utilizar funciones en programas y acceder a su documentación
- Variables y constantes
- Funciones
- Clases
- Anotaciones para tipos complejos
- Alias
- Funciones con varios valores de retorno
- Anotaciones para variables con valores de distinto tipo
- Mypy
- Mostrar diferencias del código a convertir
- Traducir el código de Python 2.x a 3.x
- Aplicar o excluir reglas de traducción específicas
- Conversión de módulos de terceros
Copia superficial y profunda de variables
- Identificadores de objetos
- Las funciones copy() y deepcopy() del módulo copy
- La función eval()
- La función exec()
- La función compile()
- Introducción
- Clases, Atributos y Métodos
- Características de la Programación Orientada a Objetos
- Variables de clases y variables de instancias
- Crear clases
- Crear objetos (instancias) de una clase
- Accediendo a los atributos y llamando a los métodos
- Funciones para atributos: getattr(), hasattr(), setattr() y delattr()
- Atributos de clase (Built-in)
- Destrucción de objetos (Recolección de basura)
- Herencia
- Herencia Múltiple
- Funciones issubclass() y isinstance()
- Polimorfismo: Sobrecarga de Métodos
- Polimorfismo: Sobrecarga de Operadores
- Encapsulación: Ocultación de Datos
- Propiedades (properties)
- Orden de Resolución de Métodos (MRO).
- El atributo especial __mro__
- La función super()
- La función map()
- La función filter()
- La función reduce()
- La función lambda
- Comprensión de listas
- Generadores
- La función Decorador
- Creación de una enumeración
- Comparaciones. La clase IntEnum
- Iteraciones
- Enumeraciones con constantes con valores únicos
- Enumeraciones con métodos
- Los métodos de dataclass
- Los parámetros de dataclass
- La función asdict()
- La función field()
- Herencia
- Abrir archivo
- Cerrar archivo
- Leer archivo: read, readline, readlines, with-as
- Escribir en archivo: write, writelines
- Mover el puntero: seek(), tell()
- Leer y escribir cualquier objeto a un archivo: pickle
- Namespaces y Alias
- Creación y uso de un módulo
- La función dir()
- Paquetes (packages)
- Funciones locals() y global()
- Llamadas de retorno. La función callable()
Explorando directorios con os.listdir, os.walk y os.scandir
- Obtener las entradas de un directorio: listdir()
- Obtener recursivamente las entradas de un directorio: walk()
- Obtener iterador con las entradas de un directorio: scandir()
- Procesar lista de archivos con fileinput.input()
- Procesar con funciones que ayudan a controlar el flujo
- Procesar lista de archivos obtenida con glob.glob()
- Procesar archivos incluidos como argumentos de un script
- Procesar múltiples líneas de la entrada estándar (stdin)
- Procesar lista de archivos con la sentencia with
- Procesar reescribiendo lista de archivos en la salida estándar
- La clase fileinput.FileInput()
- Procesar lista de archivos con la clase FileInput()
- Procesar lista de archivos con la clase FileInput() y readline()
- Procesar archivos con clase FileInput() con una codificación específica
- Procesar archivo comprimido con clase FileInput()
- El módulo Glob:
- Obtener entradas que coincidan con un patrón: glob.glob()
- Obtener iterador con entradas que coincidan con un patrón: glob.iglob()
- Adaptar cadenas con caracteres especiales: escape()
- El módulo fnmatch:
- Comprobar si una entrada coincide con un patrón: fnmatch.fnmatch()
- Comprobar si una entrada coincide diferenciando minúsculas y mayúculas: fnmatch.fnmatchcase()
- Obtener lista con entradas que coinciden con patrón: fnmatch.filter()
- Obtener patrón de búsqueda convertido en expresión regular: fnmatch.translate()
- Copiar archivos completos o parciales: copyfileobj()
- Copiar archivos completos sin metadatos: copyfile()
- Copiar los permisos de un archivo: copymode()
- Copiar el estado de un archivo: copystat()
- Copiar archivos con permisos: copy()
- Copiar archivos con permisos y metadatos: copy2()
- Copiar un árbol de directorios con sus archivos: copytree()
- Borrar un árbol de directorios con sus archivos: rmtree()
- Mover un archivo o un directorio con su contenido: move()
- Obtener información del espacio de un disco: disk_usage()
- Cambiar propietario y/o grupo de un archivo/directorio: chown()
- Obtener la ruta de un archivo ejecutable: which()
- Rutas puras y concretas
- Empaquetar un directorio: make_archive()
- Desempaquetar un directorio: unpack_archive()
- Obtener formatos permitidos para empaquetar: get_archive_formats()
- Obtener formatos permitidos para desempaquetar: get_unpack_formats()
- Otras funciones relacionadas
- Counter, el contador de Python
- Objeto deque, más que una lista
- Con OrderedDict el orden ha llegado
- Tuplas a medida con namedtuple
- Combinar diccionarios con ChainMap
- defaultdic vs setdefault
- Funciones que devuelven iterables infinitos
- count(), cycle() y repeat()
- Funciones que devuelven iterables que finalizan
- accumulate(), chain(), chain.from_iterable(), compress(), dropwhile(), filterfalse(), groupby(), islice(), starmap(), takewhile(), tee() y zip_longest()
- Generadores para combinatoria
- product(), permutations(), combinations() y combinations_with_replacement()
- Progress
- Instalación de Progress
- Objetos Bar, ChargingBar, Spynner y Countdown de Progress
- TQDM
- Instalación de TQDM
- Barras de progreso con TQDM
- El módulo tempfile
- Crea archivo temporal (sin nombre): TemporaryFile()
- Crea archivo temporal (con nombre): NamedTemporaryFile()
- Crea archivo estableciendo tamaño del búfer: SpooledTemporaryFile()
- Crea directorio temporal: TemporaryDirectory()
- Crea archivo temporal sin borrado desatendido: mkstemp()
- Crea directorio temporal sin borrado desatendido: mkdtemp()
- Obtiene directorio temporal: gettempdir()/gettempdirb()
- Obtiene prefijos de nombres: gettempprefix()/gettempprefixb()
- La variable tempdir
- Funciones para comparar objetos
- Funciones para operaciones lógicas
- Funciones para operaciones matemáticas
- Funciones para operaciones con secuencias
- Funciones para hacer referencia a elementos y atributos
- Funciones de operadores in situ
- Declarar arrays
- Operaciones básicas con arrays
- Cadenas de bytes. Leer/Escritura de arrays a/de archivos
- El módulo locale
- Obtener/establecer la configuración regional: setlocate()
- Obtener diccionario con configuración actual: locale.localeconv()
- Funciones para aplicar las definiciones de configuración
- Obtener información específica de configuración: locale.nl_langinfo()
- Funciones para obtener el idioma y la codificación
- Programas multilingües con gettext
- Construir un programa con sus mensajes traducidos a varios idiomas
- Identificar los mensajes a traducir
- Crear una plantilla de traducción
- Traducir y compilar los mensajes
- Cargar y usar el catálogo de mensajes apropiado
- Conocer la disponibilidad y usar catálogos
- Usar el catálogo del entorno del usuario
- Usar el catálogo preferido de una lista de catálogos
- Introducción
- Versiones de Python y rutas de instalación
- Preparando el sistema
- Creando y usando un entorno virtual con venv
- Creando y usando un entorno virtual con virtualenv
- Configurar el editor Geany para entornos virtuales
- Observaciones
- El módulo ConfigParser
- Crear secciones y opciones de configuración
- Guardar en un archivo la configuración
- Leer datos del archivo de configuración
- La sección DEFAULT
- El módulo de depuración pdb
- Tipos de errores
- Uso de depurador
Rastreando la ejecución de un programa (trace)
- Rastrear la ejecución de un programa
- Rastrear las líneas que se ejecutan
- Rastrear, contar línea ejecutadas y obtener líneas no ejecutadas
- Rastrear llamadas a funciones
- Rastrear relaciones entre módulos por llamadas a funciones
- Rastrear y obtener informes combinados
- Agregar opción para rastrear en el editor de código
- Pruebas insertadas en el código fuente
- Prueba independientes del código fuente
- Escribiendo pruebas para doctest
- Opciones para modificar el comportamiento de doctest
- La función match()
- Comodines
- Carácter especial
- Alternativas
- Grupos aislados
- Rangos
- Caracteres predefinidos
- Caracteres que permiten repeticiones
- Coincidencias al comienzo y al final
- El objeto mo y el método group()
- La función search()
- Métodos start() y end()
- La función findall()
- La función finditer()
- La función split()
- La función sub()
- Clase Differ. Comparando secuencias
- Obtener diferencias entre textos con Differ() y compare()
- Obtener diferencias entre textos con ndiff()
- Ajustar los resultados de ndiff() con linejunk y charjunk
- Obtener diferencias con restore()
- Obtener diferencias unificadas con unified_diff()
- Obtener las mejores coincidencias con get_close_matches()
- Obtener diferencias entre códigos HTML con HtmlDiff()
- La clase difflib.SequenceMatcher
- Obtener nivel de coincidencias (ratio) entre dos cadenas
- Obtener tuplas que describen pasos para convertir a en b
- Obtener las posiciones con las coincidencias de dos secuencias
- Comparar dos archivos: cmp()
- Comparar lista de archivos en dos directorios: cmpfiles()
- La clase dircmp
- PyPI, pip y PyPA
- Paquete de distribución: paquetes source o sdist y paquetes wheel
- Requerimientos para instalar paquetes de distribución
- Uso de pip
- Introducción
- Requerimientos
- Caso práctico de empaquetado y distribución de un proyecto
- Empaquetar el proyecto
- Subir el proyecto a PyPI
- Herramientas
- El modo 'desarrollo'
Operaciones con archivos CSV
- Leer archivo CSV con reader()
- Leer archivo CSV con reader() y realizar algunas operaciones básicas
- Ordenar datos con sort(), sorted() e itemgetter().
- Leer archivo CSV con reader() y ordenar salida por un campo
- Leer archivo CSV con DictReader() y filtrar salida
- Leer archivo CSV con DictReader() y consultar propiedades
- Leer archivo CSV con DictReader() y ordenar salida por nombre de campo
- Escribir archivo CSV con writer() y writerow(). Quoting
- Escribir archivo CSV con writer() y writerows()
- Leer archivo CSV con reader(), skipinitialspace y strict
- Escribir archivo CSV con DictWriter() capturando excepciones
- Leer archivo CSV con reader() de un dialecto determinado
- Crear dialecto y leer archivo CSV
- Listar dialectos disponibles
- Obtener información de un dialecto
- Suprmir dialecto
- Deducir con Sniffer() el dialecto de un archivo csv
- Deducir con Sniffer() si un archivo tiene encabezado de campos
- Mostrar/Establecer límite de tamaño de campo a analizar
- Plantillas .rap
- Secciones de una plantilla .rap
- Funciones para reglas (rules)
- Métodos de la clase Pyraptor
- Generar archivo .CSV (campos en filas)
- Generar archivo .CSV (campos en columnas)
- Generar varios archivos .CSV utilizando varias plantillas .rap
- Crear base de datos
- Crear tabla
- Iniciar y cerrar una conexión con la base de datos
- Declarar y cerrar un cursor
- Añadir registro a la tabla
- Completar la transacción de inserción de registro
- Consultar todos los registros de la tabla
- Consultar registro con parámetro
- Consultar los registros, uno a uno, con fetchone()
- Consultar un nº de registros concretos con fetchmany()
- Consultar todos los registros, con fetchall()
- Mostrar los campos de un registro por su posición
- Consultar registros por nombre de campos
- Borrar registro
- Modificar campos
- Deshacer modificación
- Instalar el módulo APSW
- Comprobar versión instalada
- Crear y/o Abrir una base de datos SQLite
- Ejecutar comandos SQL
- Crear tablas
- Listar campos de una tabla
- Insertar registros
- Consultar registros
- Encadenar varias consultas
- Obtener la descripción de los campos
- Habilitar restricciones de integridad referencial
- Borrar registros
- Crear una vista
- Insertar registros utilizando bindings
- Trazar la ejecución de comandos
- Ejecutar varias sentencias
- Instalar PyMySQL con PIP
- Conectar con base de datos y obtener datos
- Añadir una tabla nueva
- Insertar registros en la tabla nueva
- Mostrar tablas de la base de datos
- Borrar una tabla
- Introducción
- Instalación de TinyDB
- Importar módulos para realizar operaciones básicas
- Abrir/Crear una base de datos. La tabla por defecto ("_default")
- Abrir/Crear una tabla con un nombre determinado
- Obtener los nombres de las tablas de una base de datos
- Insertar registros en una tabla
- Consultar todos los registros de una tabla
- Consultar todos los registros que cumplan una condición
- Consultar el primer registro que cumpla una condición
- Actualizar el dato de un registro que cumpla una condición
- Suprimir los registros que cumplan una condición
- Mostrar contenido de la base de datos desde la consola
- Borrar todos los registros de una tabla
- Borrar todas las tablas de la base de datos
- Cerrar una base de datos
- Insertar múltiples registros
- Insertar registros con campos diferentes
- Insertar un nuevo campo en un registro en una actualización
- Insertar múltiples registros insertando campo con valor autoincrementado
- Actualizar borrando un campo de un registro que cumpla una condición
- Actualizar incrementando en 1 el valor numérico de un campo
- Actualizar decrementando en 1 el valor numérico de un campo
- Obtener el número de registros que tiene una tabla
- Leer un registro que cumpla una condición (get)
- Conocer si hay registros que cumplan una condición
- Contar los registros que cumplan una condición
- Consultar un registro por su ID
- Obtener el ID de un registro que cumpla una condición
- Actualizar un campo de varios registros por sus ID
- Borrar varios registros por su ID
- Consultar registros que no cumplan una condición (NOT -> "~")
- Consultar registros que cumplan una condición u otras (OR -> "|")
- Consultar registros que cumplan más de una condición (AND -> "&")
- Consultar registros utilizando expresiones regulares
- Consultar registros aplicando funciones
- Insertar registros con campos anidados (diccionarios)
- Consultar registros con campos anidados (diccionarios)
- Insertar registros con campos anidados (listas)
- Consultar registros con campos anidados (listas) que al menos uno cumpla
- Consultar registros con campos anidados (listas) que todos cumplan
- Consultar registros con campos anidados (listas) que contengan valor
- Crear base de datos utilizando la memoria convencional
Ejecutar programa con argumentos
Ejecutar un comando externo
Ejecutar un comando externo
- Ejecutar comando con os.system()
- Ejecutar comando con os.open() y capturar su salida
- Ejecutar comando con subprocess.call(), capturar salida y resultado
- Ejecutar comando con subprocess.Popen()
- Ejecutar comando con subprocess.Popen(), capturar salida y errores
- Ejecutar comando con subprocess.Popen(), capturar salida en tiempo real
- La clase Cmd. Métodos de la clase Cmd
- Entrando en bucle: cmdloop()
- Ejecutar comandos, uno a uno: onecmd()
- Línea sin comando: emptyline()
- Comando erróneo: default()
- Antes y después de ejecutar un comando: precmd() y postcmd()
- Al iniciar y terminar el bucle: preloop() y postloop()
- Atributos de la clase Cmd
- Analizar comandos que incluyen argumentos
Generar un archivo log
Capturar usuario actual e introducir contraseña (no visible)
El módulo time
- Funciones para obtener y convertir tiempo (civil)
- Obtener tiempo local (fecha-hora) en segundos: time()
- Convertir a cadena tiempo en segundos: ctime()
- Obtener tiempo UTC a partir de segundos: gmtime()
- Obtener tiempo local como objeto struct_time: localtime()
- Convertir a cadena un objeto struct_time: asctime()
- Convertir a segundos un objeto struct_time: mktime()
- Funciones para validar y aplicar formatos
- Validar tiempo expresado como cadena: strptime()
- Convertir y formatear un objeto struct_time: strftime()
- Funciones y variables para obtener información del huso horario
- altzone, timezone(), tzname, time.tzset() y time.daylight
- Funciones para obtener tiempo del sistema
- monotonic(), perf_counter(), process_time() y get_clock_info()
- Función para detener un programa: sleep()
- Mostrar fecha y hora (datetime)
- Comparando fechas y horas (datetime, date)
- Aplicando formatos a fechas y horas (Máscaras)
- Para convertir una cadena a objeto datetime
- Operaciones con fechas y horas
- Otros ejemplos de operaciones con otras unidades de tiempo
- Diferencia entre dos fechas (datetime)
- Diferencia entre dos fechas en días (datetime y strptime)
- Diferencia de dos fechas (date)
- Expresar una fecha en formato largo
- A partir de una fecha se obtiene tupla con año, nº semana y día de semana
- Obtener día de la semana por su número
- Dado el ordinal se obtiene la fecha correspondiente
- Dada una fecha se obtiene un ordinal (01-01-0001 -> 1)
- Obtener una tupla a partir de fecha-hora (datetime)
- Convertir un ordinal en fecha-hora (fromtimestamp)
- Obtener calendario del mes actual (calendar.month)
- Obtener calendario del mes actual (calendar.TextCalendar)
- Obtener matriz con calendario de mes actual: (Calendar monthdayscalendar)
- Obtener matriz de tuplas con calendario: (Calendar monthdays2calendar)
- Calendario completo del año
- El módulo sched
- Declarar un programador: scheduler()
- Programar eventos y poner en marcha el programador: run()
- Programar eventos para ejecutar en un momento determinado: entertabs()
- Programar eventos con posibilidad de cancelación: cancel()
- Programar eventos para ejecutar después de un tiempo de espera: enter()
- Programar eventos para ejecutar considerando la prioridad
- Programar eventos para ejecutar controlando el bloqueo: blocking
- Objetos Thread: los hilos
- Hilos con argumentos
- Hilos que funcionan durante un tiempo
- Demonios
- Controlar la ejecución de varios demonios
- Crear una subclase Thread y redefinir sus métodos
- Temporizadores (Timer).
- Sincronizar hilos con objetos Event
- Control de acceso a los recursos. Bloqueos
- Sincronizar hilos con objetos Condition
- Sincronizar hilos con objetos Barrier
- Limitar el acceso concurrente con semáforos (Semaphore)
- Qué es Markdown
- Referencia rápida
- El módulo Markdown
- Instalación
- Uso básico del módulo
- Línea de comandos
- randint() y randrange()
- random() y uniform()
- seed()
- choice(), suffle(), sample() y getrandbits()
- getstate() y setstate()
- La clase Random
- La clase random.SystemRandom
- Otras funciones disponibles
- Abrir una página en el navegador web: open()
- Abrir una página en una nueva ventana: open_new()
- Abrir una página en una nueva pestaña: open_new_tab()
- Abrir una página con un navegador específico: get()
- Registrar un nuevo navegador: register()
- Cálculo de promedios y de valores medios:
- Media: mean(data)
- Media armónica: harmonic_mean(data)
- Mediana: median(data)
- Mediana baja: median_low(data)
- Mediana alta: median_high(data)
- Mediana agrupada: median_grouped(data, interval=1)
- Moda: mode(data)
- Medidas de dispersión:
- Varianza (población): pvariance(data, mu=None)
- Desviación estándar (población): pstdev(data, mu=None)
- Varianza (muestra): variance(data, xbar=None)
- Desviación estándar (muestra): stdev(data, xbar=None)
- Instalación del módulo gpcharts
- Crear gráficos en páginas HTML comunes
- Gráfico de una línea: plot()
- Gráfico de varias líneas
- Gráfico de líneas con título, etiquetas de ejes y tamaño determinado
- Gráfico de línea con serie temporal
- Gráfico de líneas con escala logarítmica
- Gráfico de dispersión: scatter()
- Gráfico de barras: bar()
- Histograma: hist()
- Crear gráficos en un cuaderno Jupyter Notebook
- Instalar Jupyter Notebook
- Iniciar Jupyter Notebook
- Crear un cuaderno Jupyter Notebook
- Insertar un gráfico en un cuaderno
- Instalación de Pyapng
- Crear una animación apng
- Crear una animación apng con retardos diferentes
- Extraer imágenes de un archivo apng
- Crear imágenes ASCII
- Instalación
- La función tabulate()
- Imprimir una tabla con datos tabulados
- Imprimir una tabla con cabecera
- Imprimir una tabla con índice
- Imprimir tablas con distintos formatos
- Alineación y formato
- Tabulate desde la línea de comandos
El depurador PuDB
Proyectos de documentación con MkDocs
- Instalación de MkDocs
- Creando un proyecto nuevo de documentación
- Examinando los documentos iniciales
- Comenzando a trabajar con el servidor de desarrollo
- La barra de navegación
- Cambiando la apariencia del proyecto
- Construyendo el sitio
Fundamentos para procesar imágenes con Pillow (I)
- Instalación
- Abrir imágenes
- Consultar información de las imágenes
- Edición básica (tamaños, rotar, girar...) y guardar imágenes
- Tipos de imágenes y formatos
- Convertir imágenes
- Filtros
- Añadir bordes a una imagen o recortarlos
- Aplicar efectos
- Dibujar sobre una imagen
- Escribir texto sobre una imagen
- EasyGUI, la interfaz gráfica fácil
- Mostrar cajas de mensajes
- Entrada de datos
- Entrada de contraseñas
- Listas de opciones
- Gestión de errores
- Ventanas comunes: abrir directorio, abrir archivo y guardar archivo
- Egstore: archivos de configuración
Tkinter
- Introducción
- Consultar la versión de Tkinter
- Instalar Tkinter
- La primera aplicación
- La primera aplicación, orientada a objetos
- Obtener información de una ventana
- Introducción
- El gestor de geometría Pack
- El gestor de geometría Grid
- El gestor de geometría Place
- Ventanas de aplicación y de diálogos
- Ventanas modales y no modales
- Declarar variables de control
- Método set()
- Método get()
- Método trace()
- Estrategias para validar y calcular datos
- Introducción
- Menús de opciones
- Barras de herramientas
- Barra de estado
- PyRemoto, un ejemplo de implementación