[Python 3 learning notes - basic syntax] learn about standard libraries in Python

Keywords: Python crawler regex

Operating system interface

The os module provides many 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 the 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 with the operating system, does not override the built-in function open().

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

If you are interested in learning Python together, click the following icon to add a group:

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 to generate 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 sys module in the form of linked list. For example, after executing "python demo.py one two three" on the command line, you can get the following output results:

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

Error output redirection and program termination

sys also has 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

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

If you only need simple functions, 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'

mathematics

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

Access to the Internet

There are several modules for accessing the Internet and handling network communication protocols. The simplest two are urllib.request for processing data received from urls 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 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 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

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 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 seems much more attractive 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 with the fine granularity of timeit, the: mod:profile and pstats modules provide time measurement tools for larger blocks of code.

Test module

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 strengthens 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()   # Automatic verification embedded test

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)
        self.assertRaises(ZeroDivisionError, average, [])
        self.assertRaises(TypeError, average, 20, 30, 70)

unittest.main() # Calling from the command line invokes all tests

If you are interested in learning Python together, click the following icon to add a group:

Posted by mattsoftnet on Sun, 24 Oct 2021 11:27:01 -0700