博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python常用内建模块(五)
阅读量:7153 次
发布时间:2019-06-29

本文共 3165 字,大约阅读时间需要 10 分钟。

requests

一、collections

是Python内建的一个集合模块,提供了许多有用的集合类。

namedtuple,是一个函数,用来创建一个自定义的tuple对象,格式:namedtuple('名称', [属性list]);

例如:创建一个坐标为(1,2)的点

from collections import namedtuple

Point = namedtuple('Point', ['x','y'])

p = Point(1,2)

p.x1

deque,高效实现插入和删除操作的双向列表,适合用于队列和栈。(list访问数据快,但是插入和删除元素很慢)。

例如:

>>>from collections import deque

>>>q = deque(['a','b','c'])

>>>q.append('x')

>>>q.appendleft('y')

>>>q

deque(['y','a','b','c','x'])

deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。

defaultdict,使用dict时,如果引用的key不存在,就会抛出keyError。所以使用defaultdict可以在key不存在时返回一个默认值。

>>>from collections import defaultdict

>>>dd = defaultdict(lambda:'N/A')

>>>dd['key1'] ='abc'

>>>dd['key1']  # key1存在

'abc'

>>>dd['key2']  # key2不存在,返回默认值

'N/A'

注意默认值是调用函数返回的,而函数在创建defaultdict对象时传入。除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。

OrderedDict,保持dict中的key的顺序(key会按照key插入的顺序排列,不是key本身顺序);

OrderedDict可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key。例如:

from collections import OrderedDict 

class LastUpdatedOrderedDict(OrderedDict):

  def__init__(self, capacity):

    super(LastUpdatedOrderedDict, self).__init__()

     self._capacity = capacity

 def__setitem__(self, key, value):

     containsKey =1 if key in self else 0 

     if len(self) - containsKey >= self._capacity: 

        last = self.popitem(last=False)

        print'remove:',last

     if containsKey:

       del self[key]

       print'set:', (key, value)

    else:print 'add:',  (key, value)

        OrderedDict.__setitem__(self, key, value)

Counter,是一个简单的计数器,可以用于统计字符出现的个数;counter是dict的一个子类。

二、base64

Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据。base64是一种通过查表的编码方法,不能用于加密,即使使用自定义的编码表也不行;适用于小段内容的编码;

三、struct

struct模块用来解决str和其他二进制数据类型的转换,如struct的pack函数把任意数据类型变成字符串。

>>>import struct

>>>struct.pack('>I',10240099)

'\x00\x9c@c'

说明:pack的第一个参数是处理指令,'>I'的意思是:>表示字节顺序是big-endian,也就是网络序,I表示4字节无符号整数。后面的参数个数要和处理指令一致。

四、hashlib

hashlib提供了常见的摘要算法,如MD5,SHA1;摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

五、itertools

是用于操作迭代对象的函数,

无限迭代器例子:

>>>import itertools

>>>natuals = itertools.count(1)

>>>forninnatuals:

... printn n

...

1

2

...

说明:count(),会创建一个无限的迭代器,所以上述代码会按自然顺序一直打印。

cycle(),会把一个序列无限重复下去。

repeat(),负责把一个元素无限重复下去,不过如果提供第二个参数就可以限定重复次数。

takewhile(),等函数,可以从count()迭代出来的无限序列中,根据条件判断来截取出一个有限的序列。

chain(),可以把一组迭代对象串联起来,形成一个更大的迭代器。

groupby(),把迭代器中相邻的重复元素挑出来放在一起。例如:

>>>for key, group in itertools.groupby('AAABBBCCAAA'):

...print key,  list(group)

...

A ['A','A','A']

B ['B','B','B']

C ['C','C']

A ['A','A','A']

imap(),可以作用于无穷序列,如果两个序列的长度不一致,以短的那个为准。imap()和map()的区别在于:imap()返回一个迭代对象,而map()返回list。

ifilter(),ifilter()就是filter()的惰性实现。

六、XML

操作xml的两种方法:DOM和SAX;DOM会把整个XML读入内存,解析为树,占用内存大,解析慢。SAX是流模式,边读边解析,占用内存小,解析快。

在Python中使用SAX解析XML非常简洁,通常我们关心的事件是start_element,end_element和char_data,准备好这3个函数,然后就可以解析xml了。

会产生3个事件:

start_element事件,在读取时;

char_data事件,在读取python时;

end_element事件,在读取时。

七、urllib和urllib2

urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL,所以不能用urllib模块伪装成User Agent字符串等(伪装浏览器);

urllib提供urlencode方法用来GET查询字符串的产生,urllib2没有;

urllib2.urlopen可以接受Request对象作为参数,从而可以控制HTTP Request的header部,这就是urllib2比较近有优势的地方;

urllib.urlretrieve函数以及urllib.quote等一系列quote和unquote功能没有被加入urllib2中,因此有时也需要urllib的辅助

BeautifulSoup

是一个可以从HTML或XML文件中提取数据的Python库。可以实现处理导航、搜索、修改分析树等功能,如需了解更多,可以查看。

转载地址:http://aulgl.baihongyu.com/

你可能感兴趣的文章
调用系统拍照
查看>>
解方程
查看>>
Java——IO之常量及路径
查看>>
DKhadoop安装包下载与监控参数说明
查看>>
Linux-3.5-Exynos4412驱动分层分离
查看>>
Linux shell break、continue、exit、return的用法 及exit、return的区别
查看>>
手动实现 SpringMVC
查看>>
thinkphp 验证码的使用
查看>>
HTML5学习笔记
查看>>
Eclipse helios 上编写arduino程序并进行烧录
查看>>
基于ArcGIS10.0和Oracle10g的空间数据管理平台二(C#开发)-登录功能模块
查看>>
NSUserDefaults保存应用中的数据
查看>>
安装gevent错误/gevent/core.so: undefined symbol: event_global_current_base_ 的解决方案
查看>>
XML序列化点滴
查看>>
Android游戏与应用开发最佳学习路线图
查看>>
【转】NSJSONSerialization解析JSON数据
查看>>
POJ 3252 Round Numbers(数学问题)
查看>>
本地使用CVS
查看>>
模拟系统提示框
查看>>
在dos下运行java jar包,并把命令存为bat文件
查看>>