Présentation de la bibliothèque standard Python3


Interface du système d'exploitation

Le module os fournit de nombreuses fonctions liées au système d'exploitation.

>>> import os
>>> os.getcwd()      # 返回当前的工作目录
'C:\Python34'
>>> os.chdir('/server/accesslogs')   # 修改当前的工作目录
>>> os.system('mkdir today')   # 执行系统命令 mkdir 
0

Il est recommandé d'utiliser le style "import os" au lieu de "from os import *". Cela garantit que os.open(), qui varie d'un système d'exploitation à l'autre, n'écrase pas la fonction intégrée open().

Les fonctions intégrées dir() et help() sont très utiles lors de l'utilisation de gros modules comme os:

>>> 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 permettant de générer une liste de fichiers à partir d'une recherche par caractère générique dans un répertoire :

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

Paramètres de ligne de commande

Les scripts d'outils courants appellent souvent des paramètres de ligne de commande. Ces paramètres de ligne de commande sont stockés dans la variable argv du module sys sous la forme d'une liste chaînée. Par exemple, après avoir exécuté "python demo.py un deux trois" sur la ligne de commande, vous pouvez obtenir le résultat suivant :

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

Redirection de sortie d'erreur et terminaison du programme

sys et Propriétés stdin, stdout et stderr, ces dernières peuvent être utilisées pour afficher des messages d'avertissement et d'erreur même lorsque stdout est redirigé.

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

La plupart des scripts utilisent "sys.exit()" pour une terminaison dirigée. Le module


Correspondance régulière de chaînes

re fournit des outils d'expression régulière pour le traitement avancé des chaînes. Pour les correspondances et les traitements complexes, les expressions régulières fournissent des solutions concises et optimisées :

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

Si vous n'avez besoin que de fonctionnalités simples, vous devez d'abord envisager les méthodes de chaîne, car elles sont très simples et faciles à lire et à déboguer :

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

Math

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

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

random fournit des outils pour générer des nombres aléatoires.

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

Visite Internet

Il existe plusieurs modules permettant d'accéder à Internet et de gérer les protocoles de communication réseau. Les deux plus simples d'entre eux sont urllib.request pour gérer les données reçues des URL et smtplib pour l'envoi d'e-mails :

>>> 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('soothsayer@example.org', 'jcaesar@example.org',
... """To: jcaesar@example.org
... From: soothsayer@example.org
...
... Beware the Ides of March.
... """)
>>> server.quit()

Notez que le deuxième exemple nécessite un serveur de messagerie en cours d'exécution localement.


Date et heure

Le module datetime fournit des méthodes simples et complexes pour le traitement de la date et de l'heure.

Tout en prenant en charge les algorithmes de date et d'heure, la mise en œuvre se concentre sur un traitement et un formatage plus efficaces de la sortie.

Ce module prend également en charge le traitement des fuseaux horaires :

>>> # dates are easily constructed and formatted
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'

>>> # dates support calendar arithmetic
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368

Compression des données

Les modules suivants prennent directement en charge les formats de conditionnement et de compression de données courants : 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

Metriques de performances

Certains utilisateurs souhaitent comprendre les différences de performances entre différentes approches pour résoudre le même problème. Python fournit un outil de mesure qui apporte des réponses directes à ces questions.

Par exemple, utiliser le packaging et le dépackage de tuples pour échanger des éléments semble beaucoup plus tentant que d'utiliser des méthodes traditionnelles, et cela prouve avec le temps que les méthodes modernes sont plus rapides.

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

Par rapport à la finesse de timeit, les modules :mod:profile et pstats fournissent des outils de mesure du temps pour des blocs de code plus volumineux.


Module de test

L'un des moyens de développer un logiciel de haute qualité est de développer du code de test pour chaque fonction et de le tester fréquemment pendant le processus de développement

Le module doctest fournit un outil qui analyse les modules et effectue des tests basés sur des docstrings intégrés dans le programme.

Tester une construction est aussi simple que de couper et coller sa sortie dans une docstring.

Il enrichit la documentation avec des exemples fournis par l'utilisateur, permettant au module doctest de confirmer que les résultats du code sont cohérents avec 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 simple à utiliser comme module doctest, mais il peut être utilisé. Un ensemble de tests plus complet est fourni 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