Aperçu de la bibliothèque standard Python3

La bibliothèque standard de Python est très vaste, couvrant un large éventail de composants. En utilisant la bibliothèque standard, nous pouvons facilement accomplir diverses tâches.

Voici quelques modules de la bibliothèque standard Python3 :

  • module os : Le module os fournit de nombreuses fonctions pour interagir avec le système d'exploitation, telles que créer, déplacer et supprimer des fichiers et des répertoires, ainsi que pour accéder aux variables d'environnement.

  • module sys : Le module sys fournit des fonctions liées à l'interpréteur Python et au système, telles que la version et le chemin de l'interpréteur, ainsi que des informations sur stdin, stdout et stderr.

  • module time : Le module time fournit des fonctions de gestion du temps, telles que l'obtention de l'heure actuelle, le formatage des dates et des heures, la mesure du temps, etc.

  • module datetime : Le module datetime fournit des fonctions de traitement des dates et heures plus avancées, telles que la gestion des fuseaux horaires, le calcul des différences de temps, le calcul des différences de dates, etc.

  • module random : Le module random fournit des fonctions pour générer des nombres aléatoires, comme générer des entiers aléatoires, des nombres à virgule flottante, des séquences, etc.

  • module math : Le module math fournit des fonctions mathématiques, telles que les fonctions trigonométriques, les fonctions logarithmiques, les fonctions exponentielles, les constantes, etc.

  • module re : Le module re fournit des fonctions de traitement d'expressions régulières, qui peuvent être utilisées pour la recherche de texte, le remplacement, le découpage, etc.

  • module json : Le module json fournit des fonctions d'encodage et de décodage JSON, qui peuvent convertir des objets Python au format JSON et analyser des objets Python à partir du format JSON.

  • module urllib : Le module urllib fournit des fonctions pour accéder aux pages web et gérer les URL, notamment le téléchargement de fichiers, l'envoi de requêtes POST, la gestion des cookies, etc.

Interface du système d'exploitation

Le module os fournit de nombreuses fonctions liées au système d'exploitation, telles que les opérations sur les fichiers et les répertoires.

Exemple

import os

# Obtenir le répertoire de travail actuel
current_dir = os.getcwd()
print("Répertoire de travail actuel :", current_dir)

# Lister les fichiers du répertoire
files = os.listdir(current_dir)
print("Fichiers dans le répertoire :", files)

Il est recommandé d'utiliserimport osplutôt que le stylefrom os import *, cela garantit que ce qui varie selon le système d'exploitation, à savoiros.open(),ne remplacera pas la fonction intégrée open().

Lors de l'utilisation de modules volumineux comme os, les fonctions intégrées dir() et help() sont très utiles :

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

Pour les tâches quotidiennes de gestion de fichiers et de répertoires, le module :mod:shutil fournit une interface de haut niveau facile à utiliser :

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

Caractères génériques de fichiers

Le module glob fournit une fonction pour générer des listes de fichiers à partir de recherches de caractères génériques dans les répertoires :

Exemple

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

Arguments de ligne de commande

Les scripts utilitaires courants invoquent souvent des arguments de ligne de commande. Ces arguments de ligne de commande sont stockés sous forme de liste dans la variable argv du module sys. Par exemple, après avoir exécuté "python demo.py one two three" sur la ligne de commande, la sortie suivante peut être obtenue :

Exemple

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

Redirection de la sortie d'erreur et terminaison du programme

sys possède également les attributs stdin, stdout et stderr ; même lorsque stdout est redirigé, ce dernier peut être utilisé pour afficher des avertissements et des messages d'erreur.

Exemple

>>> sys.stderr.write('Warning, log file not found starting a new one\n')
Avertissement, journal fichier non trouvé, démarrage d'un nouveau one

La plupart des scripts utilisent une terminaison dirigéesys.exit()。


Correspondance d'expressions régulières sur les chaînes

reLe module fournit des outils d'expressions régulières pour le traitement avancé des chaînes. Pour la correspondance et le traitement complexes, les expressions régulières offrent des solutions concises et optimisées :

Exemple

>>> 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 vous n'avez besoin que de fonctionnalités simples, vous devriez d'abord envisager les méthodes de chaînes, car elles sont très simples, faciles à lire et à déboguer :

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

Math

mathLe module donne accès à la bibliothèque de fonctions C sous-jacente pour les opérations en virgule flottante :

Exemple

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

randomFournit des outils pour générer des nombres aléatoires.

Exemple

>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10)   # échantillonnage sans remise
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random()    # nombre flottant aléatoire
0.17970987693706186
>>> random.randrange(6)    # entier aléatoire choisi dans range(6)
4

Accéder à Internet

Il existe plusieurs modules pour accéder à Internet et gérer les protocoles de communication réseau. Les deux plus simples sont urllib.request pour traiter les données reçues depuis des URL et smtplib pour envoyer des e-mails :

Exemple

>>> from urllib.request import urlopen
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
...     line = line.decode('utf-8')  # Décodage des données binaires en texte.
...     if 'EST' in line or 'EDT' in line:  # rechercher l'heure de l'Est
...         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]
...
... Prenez garde aux ides de Mars.
... """
)
>>> server.quit()

Notez que le deuxième exemple nécessite un serveur de messagerie fonctionnant localement.


Date et heure

datetimeLe module fournit à la fois des méthodes simples et complexes pour le traitement des dates et des heures.

Tout en prenant en charge l'arithmétique des dates et des heures, l'implémentation se concentre sur un traitement plus efficace et une sortie formatée.

Exemple

import datetime

# Obtenir la date et l'heure actuelles
current_datetime = datetime.datetime.now()
print(current_datetime)

# Obtenir la date actuelle
current_date = datetime.date.today()
print(current_date)

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

Le résultat de sortie est:

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

Le module prend également en charge la gestion des fuseaux horaires :

>>> # 导入了 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

Compression de données

Les modules suivants prennent directement en charge les formats courants d'empaquetage et de compression de données : zlib, gzip, bz2, zipfile et 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

Mesure de performance

Certains utilisateurs souhaitent connaître les différences de performance entre différentes méthodes pour résoudre le même problème. Python fournit un outil de mesure qui donne des réponses directes à ces problèmes.

Par exemple, utiliser l'empaquetage et le dépaquetage de tuples pour échanger des éléments semble beaucoup plus attrayant que d'utiliser les méthodes traditionnelles ; timeit prouve que la méthode moderne est plus rapide.

>>> 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

Comparé à la granularité fine de timeit, les modules :mod:profile et pstats fournissent des outils de mesure du temps pour des blocs de code plus importants.


Test des modules

Une façon de développer des logiciels de haute qualité consiste à développer du code de test pour chaque fonction et à tester fréquemment pendant le processus de développement.

Le module doctest fournit un outil qui analyse les modules et exécute des tests en se basant sur les docstrings intégrées dans le programme.

La construction du test est aussi simple que de couper-coller sa sortie dans la docstring.

Grâce à des exemples fournis par l'utilisateur, il enrichit la documentation, permettant au module doctest de confirmer si les résultats du code correspondent à la documentation :

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()   # 自动验证嵌入测试

Le module unittest n'est pas aussi facile à utiliser que le module doctest, mais il peut fournir une suite de tests plus complète dans un fichier séparé :

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

Ce que nous avons vu ci-dessus ne représente qu'une partie des modules de la bibliothèque standard Python3. Il existe de nombreux autres modules. Vous pouvez consulter la documentation complète de la bibliothèque standard dans la documentation officielle :https://docs.python.org/zh-cn/3/library/index.html

Autres extensions