Python3 Standard Library Overview
os module provides a number of functions associated with the operating system.
>>> import os >>> os.getcwd() # returns the current working directory 'C:\\Python34' >>> os.chdir('/server/accesslogs') # Modify the current working directory >>> os.system('mkdir today') # Execute system command 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 override the built-in function open().
The built-in dir() and help() functions are 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>
For everyday file and directory management tasks, the :mod:shutil module provides an easy-to-use, advanced interface:
>>> import shutil >>> shutil.copyfile('data.db', 'archive.db') >>> shutil.move('/build/executables', 'installdir')
glob module provides a function for generating a list of files 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 arguments. These command line arguments are stored in a linked list in the argv variable of the sys module. 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 also has stdin, stdout, and stderr properties, which can be used to display warnings 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
The directional termination of most scripts uses "sys.exit()".
String regular matchThe
re module provides a regular expression tool for advanced string processing. For complex matching and processing, regular expressions provide a simple, 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 first consider string methods because they are very simple and easy to read and debug:
>>> 'tea for too'.replace('too', 'two') 'tea for two'
math module provides access to the underlying C 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
There are several modules for accessing the Internet and handling network communication protocols. The simplest of these are urllib.request for processing 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('firstname.lastname@example.org', 'email@example.com', ... """To: firstname.lastname@example.org ... From: email@example.com ... ... Beware the Ides of March. ... """) >>> server.quit()
Note that the second example requires a local mail server to be running.
date and timeThe
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 >>> birthday = date(1964, 7, 31) >>> age = now - birthday >>> age.days 14368
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
Some users are interested in understanding the performance differences between different approaches to solving the same problem. Python provides a measurement tool that provides a direct answer to these questions.
For example, using tuple encapsulation and unpacking to exchange elements seems to be more enticing 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 a time metric for larger blocks of code.
One way to develop high-quality software is to develop test code for each function and test it often during development.
The doctest module provides a tool to scan modules and perform tests based on the document strings embedded in the program.
The test construct simply cuts and pastes its output into a document string.
Through the user-provided example, it enhances the documentation and allows the doctest module to verify 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() # Automatically verify embedded tests
The unittest module is not as easy to use as the doctest module, but it can provide a more comprehensive test set 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