May 10, 2021 Python3
The os module provides a number of functions associated with 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". T his ensures that os.open() does not overwrite the built-in function open() as the operating system varies.
The built-in dir() and help() functions are useful when using 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 day-to-day file and directory management tasks, the mod:shutil module provides an advanced interface that is easy to use:
>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
>>> shutil.move('/build/executables', 'installdir')
The 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']
Universal tool scripts often call command-line parameters. T hese command line parameters are stored as lists in the argv variable of the sys module. F or 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']
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
Most scripts use "sys.exit()" for targeted termination.
The re module provides a regular expression tool for advanced string processing. R egular expressions provide a concise, optimized solution for complex matching and processing:
>>> 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 simple, easy to read, and debug:
>>> 'tea for too'.replace('too', 'two')
'tea for two'
The 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 a tool 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 processing network communication protocols. T he two simplest of these are urllib.request for processing data received from urls and smtplib for sending e-mail messages:
>>> 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('[email protected]', '[email protected]',
... """To: [email protected]
... From: [email protected]
...
... Beware the Ides of March.
... """)
>>> server.quit()
Note that the second example requires a local mail server running.
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.
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
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 ways to solve the same problem. Python provides a measurement tool that provides direct answers to these questions.
For example, swapping elements using yuan group encapsulation and unsealing 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
The mod:profile and pstats modules provide time measurement tools for larger blocks of code, relative to the fine-grainedness of timeit.
One way to develop high-quality software is to develop test code for each function, which is often tested during development
The doctest module provides a tool to scan the module and perform tests based on document strings embedded in the program.
Testing a construct is like simply cutting and pasting its output into a document string.
Through user-provided examples, it reinforces the documentation, allowing the doctest module to confirm that the results of the code are 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() # 自动验证嵌入测试
The unittest module is not as easy to use as the doctest module, but it provides a more comprehensive set of tests 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