#!/usr/bin/python
#-*-coding:gbk-*-#Python3 标准库概览'''操作系统接口os模块提供了不少与操作系统相关联的函数。建议使用 "import os" 风格而非 "from os import *"。这样可以保证随操作系统不同而有所变化的 os.open() 不会覆盖内置函数 open()。在使用 os 这样的大型模块时内置的 dir() 和 help() 函数非常有用'''import osprint(os.getcwd())#针对日常的文件和目录管理任务,:mod:shutil 模块提供了一个易于使用的高级接口:import shutilshutil.copy("from", "to")shutil.move("file", "dir")#文件通配符#glob模块提供了一个函数用于从目录通配符搜索中生成文件列表: import globprint(glob.glob("*.py"))#命令行参数#通用工具脚本经常调用命令行参数。这些命令行参数以链表形式存储于 sys 模块的 argv 变量import sysprint(sys.argv)#错误输出重定向和程序终止#sys 还有 stdin,stdout 和 stderr 属性,即使在 stdout 被重定向时,后者也可以用于显示警告和错误信息。import syssys.stderr.write("出错了")#大多脚本的定向终止都使用 "sys.exit()"。'''字符串正则匹配re模块为高级字符串处理提供了正则表达式工具。对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案'''import readre.findall(r"\bf[a-z]*", "which foot or hand fell fastest")#如果只需要简单的功能,应该首先考虑字符串方法,因为它们非常简单,易于阅读和调试: str1 = "tea for too"str1.replace("too", "two") print(str1)#数学,math模块为浮点运算提供了对底层C函数库的访问: import mathprint(math.cos(math.pi / 4))#random提供了生成随机数的工具。import randomprint(random.choice(["apple", "pear", "banana"]))print(random.sameple(range(100), 10))print(random.random())print(random.randrange())'''访问 互联网有几个模块用于访问互联网以及处理网络通信协议。其中最简单的两个是用于处理从 urls 接收的数据的 urllib.request 以及用于发送电子邮件的 smtplib: '''from urllib.request import urlopenfor line in urlopen("http://www.baidu.com"): line = line.decode("utf-8") if "EST" in line or "EDT" in line: print lineimport smtplib server = smtplib.SMTP("localhost") #需要本地有一个在运行的邮件服务器server.sendmail("805316824@qq.com", "hejing@yf.com")server.quit()'''日期和时间datetime模块为日期和时间处理同时提供了简单和复杂的方法。支持日期和时间算法的同时,实现的重点放在更有效的处理和格式化输出。该模块还支持时区处理 '''from datetime import datenow = date.today()print(now)now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")birthday = date(2000, 1, 1)age = now - birthdayprint(age.days)'''数据压缩以下模块直接支持通用的数据打包和压缩格式:zlib,gzip,bz2,zipfile,以及 tarfile'''import zlibs = "ahsuidhaisjdd"print(len(s))z = zlib.compress(s)print(len(z))s = zlib.decompress(z)print(s)print(len(s))print(zlib.crc32(s))'''性能度量有些用户对了解解决同一问题的不同方法之间的性能差异很感兴趣。Python 提供了一个度量工具,为这些问题提供了直接答案。例如,使用元组封装和拆封来交换元素看起来要比使用传统的方法要诱人的多,timeit 证明了现代的方法更快一些。'''from timeit import TimerTimer("t = a; a = b; b = t", "a = 1; b = 2").timeit()Timer("a, b = b, a", "a = 1; b = 2").timeit()#相对于 timeit 的细粒度,:mod:profile 和 pstats 模块提供了针对更大代码块的时间度量工具。'''测试模块开发高质量软件的方法之一是为每一个函数开发测试代码,并且在开发过程中经常进行测试doctest模块提供了一个工具,扫描模块并根据程序中内嵌的文档字符串执行测试。测试构造如同简单的将它的输出结果剪切并粘贴到文档字符串中。通过用户提供的例子,它强化了文档,允许 doctest 模块确认代码的结果是否与文档一致'''def average(values): return sum(values) / len(values)import doctestdoctest.testmod() # 自动验证嵌入测试#unittest模块不像 doctest模块那么容易使用,不过它可以在一个独立的文件里提供一个更全面的测试集import unittestclass TestStatisticalFunctions(unittest.TestCase): def test_average(self): self.assertEqual(average(10,20,30), 20) self.assertRaises(ZeroDivisionError, average, []) self.assertRaises(TypeError, average, 10, 20, 30)unittest.main() # Calling from the command line invokes all tests#关于urlopen的补充##处理get请求,不传data,则为get请求import urllibfrom urllib.request import urlopenfrom urllib.parse import urlencodeurl = "http://www.xxxx.com/login"data = {"username" : "admin", "password" : 123456}req_data = urlencode(data) #将字典类型的请求数据转变为url编码res = urlopen(url + '?' + req_data) #通过urlopen方法访问拼接好的urlres = res.read().decode() #read()方法是读取返回数据内容,decode是转换返回数据的bytes格式为strprint(res)#处理post请求,如果传了data,则为post请求import urllibfrom urllib.request import urlopenfrom urllib.parse import urlencodeurl = "http://www.xxxx.com/login"data = {"username" : "admin", "password" : 123456}data = urlencode(data) #将字典类型的请求数据转变为url编码data = data.encode("ascii") #将url编码类型的请求数据转变为bytes类型req_data = Request(url, data) #将url和请求数据处理为一个Request对象,供urlopen调用with urlopen(req_data) as res: res = res.read().decode() read()方法是读取返回数据内容,decode是转换返回数据的bytes格式为strprint(res)