Python3标准库
操作系统接口
os模块提供了不少与操作系统相关联的函数。
1
2
3
4
5
6
|
>>> import os
>>> os.getcwd() # 返回当前的工作目录
'C:\\Python34' >>> os.chdir( '/server/accesslogs' ) # 修改当前的工作目录
>>> os.system( 'mkdir today' ) # 执行系统命令 mkdir
0 |
建议使用 "import os" 风格而非 "from os import *"。这样可以保证随操作系统不同而有所变化的 os.open() 不会覆盖内置函数 open()。
在使用 os 这样的大型模块时内置的 dir() 和 help() 函数非常有用:
1
2
3
4
5
|
>>> import os
>>> dir (os)
<returns a list of all module functions>
>>> help (os)
<returns an extensive manual page created from the module's docstrings>
|
针对日常的文件和目录管理任务,:mod:shutil 模块提供了一个易于使用的高级接口:
1
2
3
|
>>> import shutil
>>> shutil.copyfile( 'data.db' , 'archive.db' )
>>> shutil.move( '/build/executables' , 'installdir' )
|
文件通配符
glob模块提供了一个函数用于从目录通配符搜索中生成文件列表:
1
2
3
|
>>> import glob
>>> glob.glob( '*.py' )
[ 'primes.py' , 'random.py' , 'quote.py' ]
|
命令行参数
通用工具脚本经常调用命令行参数。这些命令行参数以链表形式存储于 sys 模块的 argv 变量。例如在命令行中执行 "python demo.py one two three" 后可以得到以下输出结果:
1
2
3
|
>>> import sys
>>> print (sys.argv)
[ 'demo.py' , 'one' , 'two' , 'three' ]
|
错误输出重定向和程序终止
sys 还有 stdin,stdout 和 stderr 属性,即使在 stdout 被重定向时,后者也可以用于显示警告和错误信息。
1
2
|
>>> sys.stderr.write( 'Warning, log file not found starting a new one\n' )
Warning, log file not found starting a new one
|
大多脚本的定向终止都使用 "sys.exit()"。
字符串正则匹配
re模块为高级字符串处理提供了正则表达式工具。对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案:
1
2
3
4
5
|
>>> 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' |
如果只需要简单的功能,应该首先考虑字符串方法,因为它们非常简单,易于阅读和调试:
1
2
|
>>> 'tea for too' .replace( 'too' , 'two' )
'tea for two' |
数学
math模块为浮点运算提供了对底层C函数库的访问:
1
2
3
4
5
|
>>> import math
>>> math.cos(math.pi / 4 )
0.70710678118654757 >>> math.log( 1024 , 2 )
10.0 |
random提供了生成随机数的工具。
1
2
3
4
5
6
7
8
9
|
>>> 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 |
访问 互联网
有几个模块用于访问互联网以及处理网络通信协议。其中最简单的两个是用于处理从 urls 接收的数据的 urllib.request 以及用于发送电子邮件的 smtplib:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
>>> from urllib.request import urlopen
... 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() |
注意第二个例子需要本地有一个在运行的邮件服务器。
日期和时间
datetime模块为日期和时间处理同时提供了简单和复杂的方法。
支持日期和时间算法的同时,实现的重点放在更有效的处理和格式化输出。
该模块还支持时区处理:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
>>> # 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 |
数据压缩
以下模块直接支持通用的数据打包和压缩格式:zlib,gzip,bz2,zipfile,以及 tarfile。
1
2
3
4
5
6
7
8
9
10
11
|
>>> 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 |
性能度量
有些用户对了解解决同一问题的不同方法之间的性能差异很感兴趣。Python 提供了一个度量工具,为这些问题提供了直接答案。
例如,使用元组封装和拆封来交换元素看起来要比使用传统的方法要诱人的多,timeit 证明了现代的方法更快一些。
1
2
3
4
5
|
>>> 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 的细粒度,:mod:profile 和 pstats 模块提供了针对更大代码块的时间度量工具。
测试模块
开发高质量软件的方法之一是为每一个函数开发测试代码,并且在开发过程中经常进行测试
doctest模块提供了一个工具,扫描模块并根据程序中内嵌的文档字符串执行测试。
测试构造如同简单的将它的输出结果剪切并粘贴到文档字符串中。
通过用户提供的例子,它强化了文档,允许 doctest 模块确认代码的结果是否与文档一致:
1
2
3
4
5
6
7
8
9
10
|
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模块那么容易使用,不过它可以在一个独立的文件里提供一个更全面的测试集:
1
2
3
4
5
6
7
8
9
10
11
|
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
|
百度网盘 提取码:qw2k
如果失效,可以加群 654234959获取
python3标准库总结的更多相关文章
-
8.Python3标准库--数据持久存储与交换
''' 持久存储数据以便长期使用包括两个方面:在对象的内存中表示和存储格式之间来回转换数据,以及处理转换后数据的存储区. 标准库包含很多模块可以处理不同情况下的这两个方面 有两个模块可以将对象转换为一 ...
-
7.Python3标准库--文件系统
''' Python的标准库中包含大量工具,可以处理文件系统中的文件,构造和解析文件名,还可以检查文件内容. 处理文件的第一步是要确定处理的文件的名字.Python将文件名表示为简单的字符串,另外还提 ...
-
1.Python3标准库--前戏
Python有一个很大的优势便是在于其拥有丰富的第三方库,可以解决很多很多问题.其实Python的标准库也是非常丰富的,今后我将介绍一下Python的标准库. 这个教程使用的书籍就叫做<Pyth ...
-
Python3 标准库
Python3标准库 更详尽:http://blog.csdn.net/jurbo/article/details/52334345 文本 string:通用字符串操作 re:正则表达式操作 diff ...
-
python023 Python3 标准库概览
Python3 标准库概览 操作系统接口 os模块提供了不少与操作系统相关联的函数. >>> import os >>> os.getcwd() # 返回当前的工作 ...
-
比较两个文件的异同Python3 标准库difflib 实现
比较两个文件的异同Python3 标准库difflib 实现 对于要比较两个文件特别是配置文件的差异,这种需求很常见,如果用眼睛看,真是眼睛疼. 可以使用linux命令行工具diff a_file b ...
-
9.Python3标准库--数据压缩与归档
''' 尽管现代计算机系统的存储能力日益增长,但生成数据的增长是永无休止的. 无损(lossless)压缩算法以压缩或解压缩数据花费的时间来换取存储数据所需要的空间,以弥补存储能力的不足. Pytho ...
-
3.Python3标准库--数据结构
(一)enum:枚举类型 import enum ''' enum模块定义了一个提供迭代和比较功能的枚举类型.可以用这个为值创建明确定义的符号,而不是使用字面量整数或字符串 ''' 1.创建枚举 im ...
-
读书分享全网学习资源大合集,推荐Python3标准库等五本书「02」
0.前言 在此之前,我已经为准备学习python的小白同学们准备了轻量级但超无敌的python开发利器之visio studio code使用入门系列.详见 1.PYTHON开发利器之VS Code使 ...
随机推荐
-
Block块
block的标志:^ 特点: 1.可以保存代码 2.有返回值 3.有形参 4.调用方式和c语言一样 5.可以访问外部变量,但不能修改变量的值:如果使用__block关键字修饰的变量才可以. 1)创建 ...
-
bzoj1706
倍增好题,f[p,i,j]表示i到j经过了2^p条边走过的最短路径显然f[p+1]可以由f[p]转移来然后对n二进制拆分累加即可 ; ..,..] of int64; f,pf:..] of int6 ...
-
HTML5拖放API
拖放事件事件提供了拖放可以控制几乎所有方面的拖放操作.棘手的部分是确定每个事件触发:在拖项目火:别人火下降的目标.拖动项时,以下事件(按照这个顺序): 拖曳开始拖dragend此刻你把鼠标按钮和开始移 ...
-
amcharts报表制作
fusioncharts官网:http://www.fusioncharts.com/demos/gallery/#column-and-bar 最近使用amcharts fb4,flashBuild ...
-
Spring+Mybatis+SpringMVC后台与前台分页展示实例(附工程)(转)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文实现了一个后台由Spring+Mybatis+SpringMVC组成,分页采用Pag ...
-
Eclipse+maven+scala+spark环境搭建
准备条件 我用的Eclipse版本 Eclipse Java EE IDE for Web Developers. Version: Luna Release (4.4.0) 我用的是Eclipse ...
-
UVA - 11149 (矩阵快速幂+倍增法)
第一道矩阵快速幂的题:模板题: #include<stack> #include<queue> #include<cmath> #include<cstdio ...
-
angular模块
深入浅析AngularJS中的模块 模块是AngularJS应用程序的一个组成部分,模块可以是一个Controller.Service服务.Filter过滤器.directive指令,这些都属于模块. ...
-
mysql慢查询日志相关参数
-- mysql慢查询日志相关参数 -- 慢查询日志时间 show variables like "long_query_time"; -- 将时间设置为2s ; -- 是否开启慢 ...
-
C# winform中自定义用户控件 然后在页面中调用用户控件的事件
下面是用户控件的代码: using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...