跟着官档学python 010- 标准库概览– Part I

10.1 操作系统接口

os 模块提供很多函数与操作系统进行交互︰

>>> import os
>>> os.getcwd()
'C:\\'
>>> os.chdir('C:\python')
>>> os.getcwd()
'C:\\python'
>>> os.system('mkdir today')
0

确保使用import os而不是from os import *。这样可以防止函数os.open()覆盖内建函数open(),两者之间的操作是很不同的。

内建函数dir()和help()对os这样的大型模块提供交互式的帮助是很有用的:

>>> import os
>>> dir(os)
['F_OK', 'MutableMapping', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINH
ERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEM
PORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', '
P_OVERLAY', 'P_WAIT', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'W_
OK', 'X_OK', '_DummyDirEntry', '_Environ', '__all__', '__builtins__', '__cached_
_', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__',
'_dummy_scandir', '_execvpe', '_exists', '_exit', '_get_exports_list', '_putenv'
, '_unsetenv', '_wrap_close', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'cl
ose', 'closerange', 'cpu_count', 'curdir', 'defpath', 'device_encoding', 'devnul
l', 'dup', 'dup2', 'environ', 'errno', 'error', 'execl', 'execle', 'execlp', 'ex
eclpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fdopen', 'fsdecode',
'fsencode', 'fstat', 'fsync', 'ftruncate', 'get_exec_path', 'get_handle_inherita
ble', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getenv', 'ge
tlogin', 'getpid', 'getppid', 'isatty', 'kill', 'linesep', 'link', 'listdir', 'l
seek', 'lstat', 'makedirs', 'mkdir', 'name', 'open', 'pardir', 'path', 'pathsep'
, 'pipe', 'popen', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename
', 'renames', 'replace', 'rmdir', 'scandir', 'sep', 'set_handle_inheritable', 's
et_inheritable', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'st', 'startfile', 's
tat', 'stat_float_times', 'stat_result', 'statvfs_result', 'strerror', 'supports
_bytes_environ', 'supports_dir_fd', 'supports_effective_ids', 'supports_fd', 'su
pports_follow_symlinks', 'symlink', 'sys', 'system', 'terminal_size', 'times', '
times_result', 'truncate', 'umask', 'uname_result', 'unlink', 'urandom', 'utime'
, 'waitpid', 'walk', 'write']
>>> help(os)
Help on module os:

NAME
    os - OS routines for NT or Posix depending on what system we're on.

DESCRIPTION
    This exports:
      - all functions from posix, nt or ce, e.g. unlink, stat, etc.
      - os.path is either posixpath or ntpath
      - os.name is either 'posix', 'nt' or 'ce'.
      - os.curdir is a string representing the current directory ('.' or ':')
      - os.pardir is a string representing the parent directory ('..' or '::')
      - os.sep is the (or a most common) pathname separator ('/' or ':' or '\\')
      - os.extsep is the extension separator (always '.')
      - os.altsep is the alternate pathname separator (None or '/')
      - os.pathsep is the component separator used in $PATH etc
      - os.linesep is the line separator in text files ('\r' or '\n' or '\r\n')
      - os.defpath is the default search path for executables
      - os.devnull is the file path of the null device ('/dev/null', etc.)

    Programs that import and use 'os' stand a better chance of being
    portable between different platforms.  Of course, they must then
    only use functions that are defined by all platforms (e.g., unlink
    and opendir), and leave all pathname manipulation to os.path
-- More  --

对于日常的文件和目录管理任务, 这 shutil 模块提供了一个简单好用的高级接口:

>>> import  shutil
>>> shutil.copyfile('zhuaqu.py','zhuaqu666.py')
'zhuaqu666.py'
>>> shutil.move('zhuaqu666.py','C:\python')
'C:\\python\\zhuaqu666.py'

10.2 文件通配符

glob模块提供一个对目录中的文件进行通配符搜索的函数:

>>> glob.glob('*.py')
['zhuaqu.py']

10.3 命令行参数

常见的实用程序脚本通常需要处理命令行参数。那些参数以列表的形式存储在sys 模块的 argv 属性中.例如下面在命令行中运行python demo.py one two three 的输出结果:

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

getopt 模块处理sys.argv u时使用 getopt() 函数的约定。argparse 模块提供更加灵活和强大的命令行处理。

10.4 错误输出重定向和程序终止

sys 模块也有 stdin, stdout, stderr( 标准输入、 标准输出 和 标准错误) 的属性。即使在stdout被重定向时,后者也可以用于显示警告和错误信息:

>>> sys.stderr.write('Warning,log file not found starting a new one\n')
Warning,log file not found starting a new one
46

终止脚本的最直接方法是使用 sys.exit().

10.5 字符串模板匹配

re 模块为高级字符串处理提供了正则表达式工具。对于复杂的匹配和操作,正则表达式提供了简洁、优化的解决方案:

>>> import re
>>> re.findall(r'\bf[a-z]*','which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+)',r'\1','cat in the the hat')
'cat in the the hat'

当只需要简单的功能时,最好使用字符串方法,因为它们更容易阅读和调试:

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

10.6 数学

math模块提供基于c库函数的浮点运算.

>>> import math
>>> math.cos(math.pi/4)
0.7071067811865476
>>> math.log(1024,2)
10.0

random 的模块提供了进行随机选择的工具︰

>>> import random
>>> random.choice(['apple','pear','banana'])
'pear'
>>> random.sample(range(100),10)
[31, 68, 81, 51, 75, 17, 64, 95, 46, 96]
>>> random.random()
0.7326651444646988
>>> random.randrange(6)
2

statistics 模块计算数值数据的基本统计特性 (均值、 中位数、 方差,等)。e :

>>> import statistics
>>> data=[2.75,1.75,1.25,0.25,0.5,1.25,3.5]
>>> statistics.mean(data)
1.6071428571428572
>>> statistics.median(data)
1.25
>>> statistics.variance(data)
1.3720238095238095

SciPy 项目 https://scipy.org 有数值计算的许多其他模块。

10.7. 互联网访问

有很多的模块用于访问互联网和处理的互联网协议。最简单的两个是用于网络访问的 urllib.request 和用于发送邮件的 smtplib

>>> with urlopen('http://time.tianqi.com/') as response:
...     for line in response:
...         line=line.decode('utf-8')
...         if 'internet' in line:
...             print(line)
...
<p><b>调整电脑时间的方法:</b>双击电脑右下角时间,打开“<span>时间和日期属性</sp
an>”设置窗口,直接调整输入正确的时间即可;或者在“<span>时间和日期属性</span>”
设置窗口,点击“<span>Internet时间</span>”标签,点击“<span>立即更新按钮</span>
”,并在自动与internet时间服务器同步前面打钩。</p></div>
>>> 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()

(请注意第二个示例需要在本地主机上运行邮件服务器)。

10.8 日期和时间

datetime模块提供了处理日期和时间的简单和复杂的方法。支持日期和时间算法的同时,实现的重点放在更有效的处理和格式化输出。该模块还支持处理时区。

>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2019, 1, 28)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'01-28-19. 28 Jan 2019 is a Monday on the 28 day of January.'
>>> birthday=date(1964,7,31)
>>> age=now-birthday
>>> age.days
19904

10.9 数据压缩

通常的数据归档和压缩格式由以下模块直接支持,包括:zlib,gzip,bz2,lzma zipfile和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 性能测量

一些 Python 用户对同一问题的不同解决方法之间的性能差异深有兴趣。Python 提供了的一个度量工具可以立即解决这些问题。

例如,使用元组封装和拆封功能而不是传统的方法来交换参数可能会更吸引人。timeit模块能够快速演示一个适度的性能优势:

>>> from timeit import Timer
>>> Timer('t=a;a=b;b=t','a=1;b=2').timeit()
0.08262555743894394
>>> Timer('a,b=b,a','a=1;b=2').timeit()
0.06258341314585181

与timeit的精细粒度相对比,profile and pstats 模块提供了识别时间跨度较大的代码的工具。

10.11. 质量控制

开发高质量软件的方法之一是为每一个函数编写测试代码,并且在开发过程中经常性的运行这些测试代码。

doctest模块为 扫描模块 和 验证测试 提供了一个嵌入程序文档中的工具。测试的构造像一个把结果剪切并粘贴到文档字符串的典型调用一样简单。通过用户提供的例子,它发展了文档,允许 doctest 模块确认代码的结果是否与文档一致:

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模块并不像doctest模块那么轻松,但它允许在单独的文件中维护一组更全面的测试:

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

  • xmlrpc.client和xmlrpc.server模块使得实现远程过程调用成为一个非常简单的任务。尽管模块名称包含XML,但不需要直接了解或处理XML。

  • email包是用于管理电子邮件(包括MIME和其他基于RFC2822的邮件文档)的库。与实际发送和接收邮件的smtplib和poplib不同,email包有一个完整的工具集,用于构建或解码复杂的邮件结构(包括附件)和实现互联网编码和头协议。

  • json包为解析这种流行的数据交换格式提供了强大的支持。csv模块支持以逗号分隔值格式直接读取和写入文件,通常由数据库和电子表格支持。XML处理由xml.etree.ElementTree,xml.dom和xml.sax包支持。这些模块和包一起大大简化了Python 应用程序和其他工具之间的数据交换。

  • sqlite3模块是SQLite数据库库的包装器,提供可以使用稍微非标准的SQL语法进行更新和访问的持久性数据库。

  • 国际化由许多模块支持,包括gettext、locale和编解码器包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值