Descripción general de la biblioteca estándar de Python3

La biblioteca estándar de Python es muy amplia, y los componentes que proporciona cubren un ámbito muy extenso; el uso de la biblioteca estándar le permite realizar diversas tareas con facilidad.

Los siguientes son algunos de los módulos de la biblioteca estándar de Python3:

  • Módulo os: el módulo os proporciona muchas funciones para interactuar con el sistema operativo, como crear, mover y eliminar archivos y directorios, así como acceder a variables de entorno, etc.

  • Módulo sys: el módulo sys proporciona funcionalidades relacionadas con el intérprete de Python y el sistema, como la versión y la ruta del intérprete, e información relacionada con stdin, stdout y stderr.

  • Módulo time: el módulo time proporciona funciones para manejar el tiempo, como obtener la hora actual, formatear fecha y hora, cronometrar, etc.

  • Módulo datetime: el módulo datetime ofrece funciones más avanzadas de procesamiento de fecha y hora, como manejar zonas horarias, calcular diferencias de tiempo, calcular diferencias de fechas, etc.

  • Módulo random: el módulo random proporciona funciones para generar números aleatorios, por ejemplo, generar enteros aleatorios, números de coma flotante, secuencias, etc.

  • Módulo math: el módulo math ofrece funciones matemáticas, como funciones trigonométricas, logarítmicas, exponenciales, constantes, etc.

  • Módulo re: el módulo re proporciona funciones de procesamiento de expresiones regulares, que se pueden usar para búsqueda, reemplazo y división de texto, etc.

  • Módulo json: el módulo json proporciona funciones de codificación y decodificación JSON; puede convertir objetos de Python al formato JSON y analizar objetos de Python desde el formato JSON.

  • Módulo urllib: el módulo urllib ofrece funciones para acceder a páginas web y manejar URL, incluida la descarga de archivos, el envío de solicitudes POST, el manejo de cookies, etc.

Interfaz del sistema operativo

El módulo os proporciona bastantes funciones relacionadas con el sistema operativo, como operaciones con archivos y directorios.

Ejemplo

import os

# Obtener el directorio de trabajo actual
current_dir = os.getcwd()
print("Directorio de trabajo actual:", current_dir)

# Listar los archivos en el directorio
files = os.listdir(current_dir)
print("Archivos en el directorio:", files)

Se recomienda usarimport osel estilo en lugar defrom os import *, de esta manera se garantiza que lo que varía según el sistema operativoos.open()no sobrescriba la función integrada open().

Al usar módulos grandes como os, las funciones integradas dir() y help() son muy útiles:

>>> import os
>>> dir(os)
<returns a list of all module functions>
>>> help(os)
<returns an extensive manual page created from the module's docstrings>

Para las tareas diarias de administración de archivos y directorios, el módulo :mod:shutil ofrece una interfaz de alto nivel fácil de usar:

>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
>>> shutil.move('/build/executables', 'installdir')

Comodines de archivos

El módulo glob proporciona una función para generar listas de archivos a partir de búsquedas con comodines de directorio:

Ejemplo

>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']

Argumentos de línea de comandos

Los scripts de utilidades generales suelen invocar argumentos de línea de comandos. Estos argumentos se almacenan en forma de lista enlazada en la variable argv del módulo sys. Por ejemplo, al ejecutar "python demo.py one two three" en la línea de comandos se obtiene el siguiente resultado:

Ejemplo

>>> import sys
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']

Redirección de salida de errores y terminación del programa

sys también tiene los atributos stdin, stdout y stderr; este último puede usarse para mostrar advertencias y mensajes de error, incluso cuando stdout ha sido redirigido.

Ejemplo

>>> sys.stderr.write('Warning, log file not found starting a new one\n')
Warning, log file not found starting a new one

La terminación dirigida de la mayoría de los scripts se realiza mediantesys.exit()。


Coincidencia de expresiones regulares en cadenas

reEl módulo proporciona herramientas de expresiones regulares para el procesamiento avanzado de cadenas. Para coincidencias y procesamiento complejos, las expresiones regulares ofrecen soluciones concisas y optimizadas:

Ejemplo

>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'

Si solo necesita funciones sencillas, debería considerar primero los métodos de cadena, porque son muy simples, fáciles de leer y depurar:

>>> 'tea for too'.replace('too', 'two')
'tea for two'

Matemáticas

mathEl módulo proporciona acceso a la biblioteca de funciones C subyacente para operaciones de coma flotante:

Ejemplo

>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0

randomProporciona herramientas para generar números aleatorios.

Ejemplo

>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10)   # sampling without replacement
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random()    # random float
0.17970987693706186
>>> random.randrange(6)    # random integer chosen from range(6)
4

Acceso a Internet

Hay varios módulos para acceder a Internet y manejar protocolos de comunicación de red. Los dos más simples son urllib.request, para procesar datos recibidos de urls, y smtplib, para enviar correos electrónicos:

Ejemplo

>>> from urllib.request import urlopen
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
...     line = line.decode('utf-8')  # Decoding the binary data to text.
...     if 'EST' in line or 'EDT' in line:  # look for Eastern Time
...         print(line)

<BR>Nov. 25, 09:43:32 PM EST

>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('[email protected]', '[email protected]',
... """To: [email protected]
... From: [email protected]
...
... Beware the Ides of March.
... """
)
>>> server.quit()

Nota: el segundo ejemplo requiere que haya un servidor de correo en ejecución localmente.


Fecha y hora

datetimeEl módulo proporciona métodos tanto simples como complejos para el manejo de fechas y horas.

Además de admitir algoritmos de fecha y hora, la implementación se centra en un procesamiento más eficiente y en la salida formateada.

Ejemplo

import datetime

# Obtener la fecha y hora actuales
current_datetime = datetime.datetime.now()
print(current_datetime)

# Obtener la fecha actual
current_date = datetime.date.today()
print(current_date)

# Formatear la fecha
formatted_datetime = current_datetime.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_datetime)  # Salida: 2023-07-17 15:30:45

El resultado de salida es:

2023-07-17 18:37:56.036914
2023-07-17
2023-07-17 18:37:56

Este módulo también admite el manejo de zonas horarias:

>>> # 导入了 datetime 模块中的 date 类
>>> from datetime import date
>>> now = date.today()    # 当前日期
>>> now
datetime.date(2023, 7, 17)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'07-17-23. 17 Jul 2023 is a Monday on the 17 day of July.'

>>> # 创建了一个表示生日的日期对象
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday   # 计算两个日期之间的时间差
>>> age.days             # 变量age的days属性,表示时间差的天数
21535

Compresión de datos

Los siguientes módulos admiten directamente formatos comunes de empaquetado y compresión de datos: zlib, gzip, bz2, zipfile y tarfile.

>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
>>> zlib.crc32(s)
226805979

Medición de rendimiento

Algunos usuarios están interesados en conocer las diferencias de rendimiento entre distintos métodos para resolver el mismo problema. Python proporciona una herramienta de medición que ofrece respuestas directas a estas cuestiones.

Por ejemplo, usar empaquetado y desempaquetado de tuplas para intercambiar elementos parece mucho más atractivo que usar el método tradicional; timeit demuestra que el método moderno es más rápido.

>>> from timeit import Timer
>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
0.57535828626024577
>>> Timer('a,b = b,a', 'a=1; b=2').timeit()
0.54962537085770791

En comparación con la granularidad fina de timeit, los módulos :mod:profile y pstats proporcionan herramientas de medición de tiempo para bloques de código más grandes.


Módulos de prueba

Una de las formas de desarrollar software de alta calidad es crear código de prueba para cada función y realizar pruebas con frecuencia durante el desarrollo.

El módulo doctest proporciona una herramienta que escanea módulos y ejecuta pruebas basadas en las cadenas de documentación incrustadas en el programa.

La construcción de pruebas es tan simple como cortar y pegar su resultado de salida en la cadena de documentación.

Con ejemplos proporcionados por el usuario, refuerza la documentación y permite que el módulo doctest confirme si los resultados del código coinciden con la documentación:

def average(values):
    """Computes the arithmetic mean of a list of numbers.

    >>> print(average([20, 30, 70]))
    40.0
    """
    return sum(values) / len(values)

import doctest
doctest.testmod()   # 自动验证嵌入测试

El módulo unittest no es tan fácil de usar como el módulo doctest, pero puede ofrecer un conjunto de pruebas más completo en un archivo independiente:

import unittest

class TestStatisticalFunctions(unittest.TestCase):

    def test_average(self):
        self.assertEqual(average([20, 30, 70]), 40.0)
        self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
        self.assertRaises(ZeroDivisionError, average, [])
        self.assertRaises(TypeError, average, 20, 30, 70)

unittest.main() # Calling from the command line invokes all tests

Lo que hemos visto anteriormente es solo una parte de los módulos de la biblioteca estándar de Python3. Hay muchos otros módulos; puedes consultar la documentación completa de la biblioteca estándar en la documentación oficial:https://docs.python.org/zh-cn/3/library/index.html

Otras extensiones