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...