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还提供了两个和时间密切相关的模块:

  • datetime 模块() 支持日期和时间的算法
  • timeit 模块 计算代码段执行时间

 

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

 

posted on 2015-08-08 18:09  伊扎洛  阅读(83)  评论(0)    收藏  举报

导航