python常用內建模組(五)

2021-09-24 06:45:49 字數 3694 閱讀 2655

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

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

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

說明: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

Python常用內建模組

base64是一種用64個字元來表示任意二進位制資料的方法。用記事本開啟exe jpg pdf這些檔案時,我們都會看到一大堆亂碼,因為二進位制檔案包含很多無法顯示和列印的字元,所以,如果要讓記事本這樣的文字處理軟體能處理二進位制資料,就需要乙個二進位製到字串的轉換方法。base64是一種最常見的二進...

python常用內建模組 collections

1.namedtuple namedtuple是乙個函式,它用來建立乙個自定義的tuple物件,並且規定了tuple元素的個數,並可以用屬性而不是索引來引用tuple的某個元素。這樣一來,我們用namedtuple可以很方便地定義一種資料型別,它具備tuple的不變性,又可以根據屬性來引用,使用十分...

Python 常用的內建模組

fsum 對整個序列求和 返回浮點數 print math.fsum 1,4.5,5,7 sum python內建求和 print sum 1,4,5,7 print math.fsum 1,4.5,5,7 math.modf 將乙個浮點數拆分為整數部分和小數部分組成元組 小數在前 整數在後 pri...