翻译|Python标准功能库1

上班的时候偷懒,把Python帮助里的标准功能库1过了一遍,顺便翻译了一下,虽然我知道基本没有人看,但不是说21世纪编程能力是基本的生存力嘛。

通过阅读本文,你将了解Python的11个标准功能库

1.操作系统接口库

2.文件通配符

3.命令行参数

4.错误输入重定向及终止程序

5.字符匹配

6.数学库

7.互联网访问

8.日期与时间

9.数据压缩

10.性能评价

11.质量控制

1.操作系统接口库

OS操作系统模块提供了一系列的与操作系统的交互。要尽可能确保使用Import os方式而不是from os import *. 这将使得保持os.open()映射自不同操作的内建的open()函数。内建的dir()和help()函数是在os大模块中非常有用的辅助手段。

>>>import os

>>>os.getcwd()  #返回当前工作路径

>>>os.chdir('/abc/abc') #改变当前的工作路径

>>>os.system('mkdir today') #在系统命令行运行mkdir

>>>dir(os) #返回所有的功能模块列表

>>>help(os) #返回创建自模块文档的手册

对于日常的文件与目录管理,更容易使用的shutil模块能够提供更高层次的接口。

>>>import shutil

>>>shutil.copyfile(src, dst, *, follow_symlinks=True)  #复制文件

>>>shutil.move(src, dst, copy_function=copy2) #移动文件或目录

2.文件通配符

glob模块提供了一个通过使用通配符搜索目录并生成文件清单的功能

>>>import glob

>>>glob.glob('*.py') #返回后缀是py的所有文件列表

3.命令行参数

一般的脚本工具都需要处理命令行参数。这些参数都以列表的形式存放在sys模块的argv属性中。下面的例子是在命令行运行python demo.py one two three的输出结果:

>>>import sys

>>>print(sys.argv)

['demo.py','one','two','three']

getopt模块会根据协议,通过使用Unix的getopt()函数来处理sys.argv。argparse提供了更强大和更有弹性的处理命令行程序。

4.错误输入重定向及终止程序

sys模块还具有stdin,stdout和stderr属性,其中stderr主要用于弹出警告与错误信息,并使它们可视化,就算当stdout已经被重定向了。

>>>sys.stderr.write('Warning message')

最常用的结束脚本运行的命令是sys.exit()

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]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'

当如果只需要简单功能时,可以直接使用字符串,因为这样易读和易于调试。

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

6.数学库

math模块提供了处理浮点运算时访问C语言库的能力

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

random模块提供了随机选择工具

>>> import random
>>> random.choice(['apple', 'pear', 'banana']) #随机选择列表项
'apple'
>>> random.sample(range(100), 10)   # 100以内的10个随机数样本
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random()    # 随机浮点数
0.17970987693706186
>>> random.randrange(6)    # 6以内的随机整数
4

statistics模块提供了基础的数值统计功能(平均数、中间数、偏差等)

>>> 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>有许多做其它数值运算的模块。

7.互联网访问

有许多模块能够提供了访问互联网和处理网络协议,有两个最简单的,urllib.request是从URLs来接收数据,smtplib用于发送邮件(需要邮件服务器的支持)

>>> from urllib.request import urlopen
>>> with urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl') as response:
...     for line in response:
...         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()

8.日期与时间

datetime模块提供了多种处理日期与时间的类,支持日期与时间的数值运算,主要加强了数值运算效率与输出格式的处理。这个模块也支持时区对象。

>>> # 简单的日期建立与格式化
>>> 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.'

>>> # 支持日历运算的日期
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368

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.性能评价

有些Python开发者在开发过程中,想知道不同的方法导致的性能上的差异有多大,系统提供了测量工具来即时回答这个问题。举个例子,使用数组的打包与解包特性来替代传统的清理参数的方法具有很强的吸引力,timeit模块可以快速展示性能的优势:

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

相比于timeit的精细层面,profile和pstats模块提供了工具来识别大块代码的时间消耗。

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()   # 自动检验嵌入式测试

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,306评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,657评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,928评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,688评论 0 220
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,105评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,024评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,159评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,937评论 0 212
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,689评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,851评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,325评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,651评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,364评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,192评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,985评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,154评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,955评论 2 279

推荐阅读更多精彩内容