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

本文共 3217 字,大约阅读时间需要 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库。可以实现处理导航、搜索、修改分析树等功能,如需了解更多,可以查看。

转载于:https://juejin.im/post/5a332b21518825360b537c7b

你可能感兴趣的文章
Leetcode: Valid Word Square
查看>>
Scrapy安装介绍
查看>>
PowerDesigner12.5 下载、汉化及破解
查看>>
oncopy和onpaste
查看>>
LNK2005 连接错误解决办法
查看>>
你的数据根本不够大,别老扯什么Hadoop了
查看>>
[RxJS] Transformation operator: map and mapTo
查看>>
iOS 事件处理之UIResponder简介
查看>>
linux配置java环境变量(详细)【转】
查看>>
github 修改fork的代码之后如何提交代码并pull request
查看>>
08.移动先行之谁主沉浮----控件之轮流轰炸——常用控件
查看>>
nonatomic对引用计数的影响(非ARC)
查看>>
ASP.NET MVC 此安装不支持该项目类型解决方法
查看>>
【收藏用】--切勿转载JAVA 使用Dom4j 解析XML
查看>>
你们玩的 mysql 索引优化 真的是很垃圾 还不如看看我的
查看>>
听说你家产品经理失踪了丨极客官舍
查看>>
因“有意义的创新”三星Galaxy C9 Pro备受用户好评
查看>>
智能手机发展集体遭遇新瓶颈 中兴天机Axon M率先突围
查看>>
华为新平板以美好体验定义青春
查看>>
台当局调查职场幸福感:近6成上班族打及格分数
查看>>