Python3 standard library overview


Operating System Interface

The os module provides many functions related to the operating system.

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

It is recommended to use the "import os" style instead of "from os import *". This ensures that os.open(), which varies from operating system to operating system, does not overwrite the built-in function open().

The built-in dir() and help() functions are very useful when using large modules like 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>

For daily file and directory management tasks, the :mod:shutil module provides An easy-to-use high-level interface:

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

File Wildcard

The glob module provides a function for generating a file list from a directory wildcard search:

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

Command line parameters

Common tool scripts often call command line parameters. These command line parameters are stored in the argv variable of the sys module in the form of a linked list. For example, after executing "python demo.py one two three" on the command line, you can get the following output:

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

Error output redirection and program termination

sys and stdin, stdout and stderr properties, the latter can be used to display warning and error messages even when stdout is redirected.

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

Most scripts use "sys.exit()" for directed termination.


String regular matching

The re module provides regular expression tools for advanced string processing. For complex matching and processing, regular expressions provide concise, optimized solutions:

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

If you only need simple functionality, you should consider string methods first, because they are very simple and easy to read and debug:

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

Math

math module provides access to the underlying C function library for floating point operations:

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

random provides tools for generating random numbers.

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

Visit Internet

There are several modules for accessing the Internet and handling network communication protocols. The two simplest of these are urllib.request for handling data received from urls and smtplib for sending emails:

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

Note that the second example requires a running mail server locally.


Date and Time

The datetime module provides both simple and complex methods for date and time processing.

While supporting date and time algorithms, the implementation focuses on more efficient processing and formatting of output.

This module also supports time zone processing:

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

Data compression

The following modules directly support common data packaging and compression formats: zlib, gzip, bz2, zipfile , and 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

Performance Metrics

Some users are interested in understanding the performance differences between different approaches to solving the same problem. Python provides a measurement tool that provides direct answers to these questions.

For example, using tuple packaging and unpacking to exchange elements seems much more tempting than using traditional methods, and timeit proves that modern methods are faster.

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

Compared to the fine-grainedness of timeit, the :mod:profile and pstats modules provide time measurement tools for larger code blocks.


Test module

One of the ways to develop high-quality software is to develop test code for each function and test it frequently during the development process

The doctest module provides a Tool that scans modules and performs tests based on docstrings embedded in the program.

The test construct is as simple as cutting and pasting its output into the docstring.

It enhances the documentation with user-provided examples, allowing the doctest module to confirm that the results of the code are consistent with the 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()   # 自动验证嵌入测试

The unittest module is not as easy to use as the doctest module, but it can be used in A more comprehensive test set is provided in a separate file:

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