catalogue
10. Overview of Python standard library
10.1. Operating system interface
10.4. Error output redirection and program termination
10. Overview of Python standard library
10.1. Operating system interface
The os module provides many functions that interact with the operating system:
>>> import os >>> os.getcwd() # Return the current working directory 'C:\\Python35' >>> os.chdir('/server/accesslogs') # Change current working directory >>> os.system('mkdir today') # Run the command mkdir in the system shell 0
You should use the style of "import" rather than "from" os "import *. In this way, the os that varies with the operating system can be guaranteed Open() does not override the built-in function open().
The built-in dir() and help() functions are very useful when using some large modules such as 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 shutil module provides an easy-to-use high-level interface:
>>> import shutil >>> shutil.copyfile('data.db', 'archive.db') 'archive.db' >>> shutil.move('/build/executables', 'installdir') 'installdir'
10.2. File wildcard
The glob module provides a function to generate a file list from a directory wildcard search:
>>> import glob >>> glob.glob('*.py') ['primes.py', 'random.py', 'quote.py']
10.3. Command line parameters
Common tool scripts often call command line parameters. These command-line parameters are stored in the argv variable of sys module in the form of linked list. For example, execute python demo on the command line After py , one , two , three , the following output results can be obtained:
>>> import sys >>> print(sys.argv) ['demo.py', 'one', 'two', 'three']
The getopt module uses the Unix getopt() function to handle} sys argv. More complex command line processing is provided by the argparse module.
10.4. Error output redirection and program termination
sys also has the , stdin, stdout , and , stderr , attributes, which 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
The direct termination of most scripts uses {sys exit().
10.5. String regular matching
The re module provides regular expression tools for advanced string processing. For complex matching and processing, regular expressions provide concise and 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]+) \1', r'\1', 'cat in the the hat') 'cat in the hat'
String methods are best for simple operations because they are easy to read and debug:
>>> 'tea for too'.replace('too', 'two') 'tea for two'
10.6. mathematics
The math module provides access to the underlying C function library for floating-point operations:
>>> import math >>> math.cos(math.pi / 4.0) 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
SciPy < http://scipy.org >The project provides many numerical calculation modules.
10.7. Internet access
There are several modules for accessing the Internet and handling network communication protocols. The two simplest of these are urlib. Net, which processes data received from urls Request and SMTP lib for sending e-mail:
>>> 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 mail server running on localhost.)
10.8. 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 formatted output. The 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
10.9. data compression
The following modules directly support common data packaging and compression formats: zlib, gzip, bz2, LZMA, 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
10.10. Performance metrics
Some users are interested in understanding the performance differences between different methods to solve the same problem. Python provides a measurement tool that provides direct answers to these questions.
For example, using tuple encapsulation and unpacking to exchange elements looks much more attractive than using traditional methods. timeit proves that the latter is 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 with the fine granularity of {timeit, the profile} and pstats modules provide time measurement tools for larger code blocks.
10.11. Quality Control
One of the ways to develop high-quality software is to develop test code for each function, and test it often in the development process.
The doctest module provides a tool to scan the module and perform tests according to the document strings embedded in the program. The test construct is like simply cutting and pasting its output into a document string. Through the example provided by the user, it develops the document and allows the doctest module to confirm whether the result of the code is consistent with the document:
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 the embedded tests
unittest module is not as easy to use as 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) with self.assertRaises(ZeroDivisionError): average([]) with self.assertRaises(TypeError): average(20, 30, 70) unittest.main() # Calling from the command line invokes all tests
10.12. "Swiss Army Knife"
Python shows the philosophy of "Swiss Army Knife". This can be best represented by the advanced and robust features of its larger package. For example:
-
xmlrpc.client and XMLRPC The server module makes remote procedure calls easy. Although the module has such a name, users do not need to have knowledge of XML or process XML.
-
email package is a library for managing mail information, including MIME and other information documents based on RFC2822.
Unlike the SMTP lib and poplib modules that actually send and receive information, the email package contains a complete tool set for constructing or parsing complex message structures (including attachments) and implementing internet coding and header protocols.
-
xml.dom and XML Sax} package provides powerful support for popular information exchange formats. Similarly, the csv module supports direct reading and writing in a common database format.
Taken together, these modules and packages greatly simplify data exchange between Python applications and other tools.
-
Internationalization is supported by gettext, locale, and codecs packages.