Overview of the Python 3 Standard Library

Python 3 Standard Library Overview

Operating System Interface

The os module provides a number of operating system-related functions.

>>> import os
>>> os.getcwd() # Returns the current working directory
'C:Python34'
>>> os.chdir('/server/accesslogs') # Changes the current working directory
>>> os.system('mkdir today') # Executes the system command mkdir
0

It is recommended to use the “import os” style rather than “from os import *.” This ensures that the OS-specific os.open() function does not overwrite the built-in open() function.

The built-in dir() and help() functions are very useful when working with 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>

The :mod:shutil module provides an easy-to-use, high-level interface for everyday file and directory management tasks:

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

File Wildcards

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 Arguments

Common utility scripts often take command-line arguments. These are stored as a linked list in the argv variable of the sys module. For example, executing “python demo.py one two three” from the command line yields the following output:

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

Error Output Redirection and Program Termination

sys also has stdin, stdout, and stderr attributes; 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')
Warning, log file not found starting a new one

Most scripts terminate directly using `sys.exit()`.


Regular Expression Matching for Strings

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

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

If you only need simple functionality, you should consider string methods first, as they are simpler to read and debug:

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

Mathematics

The math module provides access to the underlying C library for floating-point arithmetic:

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

Accessing the Internet

Several modules are used to access the Internet and handle network communication protocols. Two of the simplest are urllib.request, for processing data received from URLs, and smtplib, for sending email:

>>> 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 local mail server to be running.


Date and Time

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

While supporting date and time arithmetic, the implementation focuses on efficient processing and formatted output.

This module also supports time zone handling:

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

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

For example, using tuple packing and unpacking to swap elements may seem more appealing than using the traditional method. Timeit demonstrates that the modern approach is significantly 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-grained timeit, the :mod:profile and pstats modules provide timing tools for larger blocks of code.


Test Module

One approach to developing high-quality software is to develop tests for every function and to test them frequently during development.

The doctest module provides a tool that scans modules and runs tests against the documentation strings embedded in the program.

Testing a construct is as simple as cutting and pasting its output into a docstring.

It enhances documentation with user-provided examples, allowing the doctest module to verify that the code’s results 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() # Automatically validate embedded tests

The unittest module is not as easy to use as the doctest module, but it provides a more comprehensive test suite in a single 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

Leave a Reply

Your email address will not be published. Required fields are marked *