Python 库
1.os 和操作系统有关
2.time 与时间有关
3.pcap 抓包
4.dpkt 解包和组包
5.pymssql 进行mssql数据库操作
6.cProfile 自己debug脚本性能时用的,可以精确快速计算运行时间
7.urllib2 最早接触的库之一,跟HTTP有关
8.httplib 与HTTP有关
9.smtplib SMTP的lib
10.poplib POP3的lib
11.tarfile 解tar包
12.socket 最原始的tcp库
13.paramiko SSH SFTP
14.psyco 增强性能,对函数和类,尤其包含多次循环的非常有效
15.pywin32 运用windows的API
16.selenium 界面自动化
17.sqlite3 sqlite3数据库操作
18.email 邮件的编码解码
19.stackless 微线程,据有关人测试,可以达到普通线程的十倍性能
20.wx wxpython,写界面用的
21.py2exe 把py程序弄成exe可执行的
22.shutil 很有用,copy,删除
23.thread 普通线程
24.PIL 基于Python的图像处理库,功能强大,对图形文件的格式支持广泛
25.Crypto python的加解密扩展模块
26.PycURL 传说这是实现Python下多线程网页抓取的效率最高的解决方案,本质是对libcurl C语言库的封装。其实Twisted也可以定制成为一个网页抓取工具的
27.pyinotify 利用操作系统自身提供的Notify机制以最高的效率监控文件变化
28.chardet 一个猜测网页编码(比如utf-8还是gb18030)的库,会根据HTTP参数、HTML标签、XML标签中的相关声明来进行猜测。
29.Scapy:似乎是一个能够控制底层网络封包的交互式Python工具,对网络协议分析应该很有用
30.Cankiri:用一个Python脚本实现的屏幕录像机
31.requests 使用Requests发送网络请求非常简单,好用的让人想哭
32.ConfigParser 配置文件解析 .conf 文件 和 .ini 文件
33.uuid 一个可以产生唯一uuid的库
34.hashlib 是个专门提供hash算法的库,现在里面包括md5, sha1, sha224, sha256, sha384, sha512,使用非常简单、方便
os模块
os模块提供了很多访问操作系统服务的功能。下面是一些常用的函数和变量:
environ 会环境变量进行隐射
system(command) 在子shell中执行操作系统命令
sep 路径中的分隔符
pathsep 分隔路径的分隔符
linesep 行分隔符('\n','\r','\r\n')
urandom(n) 返回n自己的加密强随机数
下面示例通过 environ 变量来查询环境变量中的 path 变量值:
import os
# C:\Perl64\site\bin;C:\Perl64\...
print os.environ['path']
根据不同的操作系统返回对于的路径分隔符:
# -- coding: utf-8 --
import os
# 返回操作系统中的路径分隔符
# windows:'\'
# UNIX/LINUX:'/'
# Mac OS:':'
print os.sep
更多使用方法,可以查看Python 文档:http://docs.python.org/2/library/os.html
fileinput 模块
fileinput 模块可以轻松的遍历文本文件的所有行。下面是 fileinput 模块中重要的函数:
input([files[, inplace[. backup]]) 便于遍历多个输入流中的行
filename() 返回当前文件的名称
filelineno() 返回当前处理文件当前(累计)行数
isfirstline() 检查当前行是否是文件的第一行
isstdin() 检查最后一行是否来自sys.stdin
nextfile() 关闭当前文件,移动到下一个文件
close() 关闭序列
更多使用方法,可以查看Python 文档:http://docs.python.org/2/library/fileinput.html
集合
集合(set)在Python 2.3 引入。Set类位于 sets 模块中。使用集合不需要导入,直接使用即可:
print set(range(10))
# set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
集合是由序列(或者其他可迭代对象)构建的,它们主要用于检查成员资格,因此副本是被忽略的:
print set([0, 1, 2, 3, 1, 2, 3])
# set([0, 1, 2, 3])
除了检查成员资格,还可以使用标准的集合操作,如:并集和交集,既可以使用方法,也可以直接使用运算操作符:
1 a = set([1,2,3])
2 b = set([2,3,4,5])
3 print a.union(b) # set([1, 2, 3, 4, 5])
4 print a | b # set([1, 2, 3, 4, 5])
5
6 c = a & b
7 print c.issubset(a) # True
8
9 print c <= a # True
10 print c.intersection(b) # set([2, 3])
11
12 print a & b # set([2, 3])
13 print a.difference(b) # set([1])
14
15 print a - b # set([1])
16 print a.symmetric_difference(b) # set([1, 4, 5])
17
18 print a ^ b # set([1, 4, 5])
19 print a.copy() # set([1, 2, 3])
20 print a.copy() is a # False
更多使用运算符和方法,可以查看Python 文档:http://docs.python.org/2/library/sets.html
集合是可变的,且本身只能包含不可变值,但是一个包含集合的集合是常见的,这时,我们只需使用 frozenset 类型对集合进行包装即可,frozenset 构造函数可以创建给定集合的一个副本:
a = set([1,2,3])
b = set([2,3,4,5])
a.add(frozenset(b))
print a # set([1, 2, 3, frozenset([2, 3, 4, 5])])
堆
堆(heap)是优先队列的一种。使用优先队列能够以任意顺序增加对象,并且能在任何时间(可能在增加对象的同时)找到(也可能是移除)最小的元素(比列表的min方法更有效率)。在Python中没有独立的堆类型——只有一个包含一些堆操作的模块,该模块是 heapq,包含了六个函数:
heappush(heap,x) 将x入堆
heappop(heap) 将堆中最小的元素弹出
heapify(heap) 将heap属性强制应用到任意一个列表
heapreplace(heap,x) 将堆中最小的元素弹出,同时将x入堆
nlargest(n,iter) 返回iter中第n大的元素
nsmallest(n,iter) 返回iter中第n小的元素
heappush 函数用于增加堆的项,如下:
1 from heapq import *
2 from random import shuffle
3
4 data = range(10)
5 shuffle(data)
6 heap = []
7 for n in data:
8 heappush(heap,n)
9
10 print heap # [0, 2, 1, 4, 3, 7, 5, 9, 6, 8]
11
12 heappush(heap,0.5)
13 print heap # [0, 0.5, 5, 3, 1, 6, 7, 9, 8, 4, 2]
更详细的使用方法和文档,请参考Python文档:http://docs.python.org/2/library/heapq.html
堆属性(heap property)
堆元素的排序是有规则的:位于i位置上的元素总比i//2位置处的元素大(或者说位置i处的元素总比2i以及21+1位置处的元素小)
双端队列
双端队列(Double-ended queue)在需要按照元素增加的顺序来移除元素时非常有用。双端队列通过可迭代对象(比如集合)创建:
1 from collections import deque
2
3 q = deque(range(5))
4 q.append(5)
5 q.appendleft(6)
6
7 print q # deque([6, 0, 1, 2, 3, 4, 5])
8 print q.pop() # 5
9
10 q.rotate(3)
11 print q # deque([2, 3, 4, 6, 0, 1])
12
13 q.rotate(-1)
14 print q # deque([3, 4, 6, 0, 1, 2])
更详细的使用方法和文档,请参考Python文档:http://docs.python.org/2/library/collections.html#collections.deque
time 模块
time 模块所包含的函数能够实现以下功能:获取当前时间、操作时间和日期、从字符串读取时间以及格式化时间字符串。日期可以使用实数(从“新纪元”的1月1日0 点开始计算到现在的秒数,新纪元是一个与平台相关的年份,对于UNIX来说是1970年),或者是包含9个整数的元组,它们分别表示下面的含义:
(2008,1,21,12,2,56,0,21,0) # 年、月、日、时、分、秒、周、儒日历、夏令时
下面是 time 模块最常用的函数:
asctime([tuple]) 将时间元组转换为字符串
localtime([secs]) 将秒数转换为日期元组,以本地时间为准
mktime(tuple) 将时间元组转换为本地时间
sleep(secs) 休眠 secs秒
strptime(string[, format]) 将字符串解析为时间元组
time() 当前时间(新纪元开始后的秒数,以UTC为准)
更详细的使用方法和文档,请参考Python文档:http://docs.python.org/2.7/library/time.html
此外,除了 time 模块,Python还提供了两个和时间密切相关的模块:
random 模块
random 模块包含返回随机数(伪随机数)的函数,下面是 random 模块的重要函数:
random() 返回 0 ≤ n < 1 之间的随机实数n,其中 0 < n ≤ 1
getrandbits(n) 以长整型形式返回n个随机数
uniform(a,b) 返回随机实数n,其中 a ≤ n < b
randrange([start],stop,[step]) 返回range(start,stop,step)中的随机数
choice(seq) 从序列seq中返回随意元素
shuffle(seq[, random]) 原地指定序列seq
sample(seq,n) 从序列seq中选择n个随机且独立的元素
下面的示例可以随机产生2008 ~ 2009 之间的随机一天:
from random import *
from time import *
date1 = (2008,1,1,0,0,0,-1,-1,-1)
time1 = mktime(date1)
date2 = (2009,1,1,0,0,0,-1,-1,-1)
time2 = mktime(date2)
random_time = uniform(time1,time2)
print asctime(localtime(random_time))
更详细的使用方法,请参考Python文档:http://docs.python.org/2/library/random.html
shelve 模块
使用 shelve 模块提供了一个简单的文件存储方案。我们可以将一个对象持久化到文件中,如下:
1 import sys, shelve
2
3 def main():
4 data = shelve.open("D:\\data.dat")
5 employee = {}
6 employee['name'] = 'sunshine'
7 employee['email'] = 'sunshine@gmail.com'
8 pid = '1'
9 try:
10 data[pid] = employee
11 finally:
12 data.close()
13
14 if __name__ == '__main__': main()
持久化之后,可以再次读取文件中的内容:
import sys, shelve
def main():
pid = '1'
data = shelve.open("D:\\data.dat")
print data[pid] # {'name': 'sunshine', 'email': 'sunshine@gmail.com'}
if __name__ == '__main__': main()
更详细的使用方法,请参考Python文档:http://docs.python.org/2/library/shelve.html

浙公网安备 33010602011771号