python淺學筆記12 常用內建模組

2021-09-23 20:43:51 字數 3532 閱讀 4917

xmlhtmlparser

自稱足夠多,不需額外安裝其他模組。batteries included

獲取本地當前日期和時間

構造時間

timestamp 浮點數 0 = 1970.01.01 00:00:00

epoch time = utc + 時區時刻

timestamp = 當前時刻 - epoch time 的秒數 timestamp與時區無關

str轉化的datetime 沒有時區資訊

時間的加減import timedelta

import timezone 強制顯示時區,必須已知時間的正確時區

轉換時區

集合模組

namedtuple函式自定義乙個tuple

deque相比list高效實現了插入和刪除操作的雙向列表,適合佇列和棧,可高效從頭部刪除,插入元素

defaultdict,key不存在是可返回預設值(dict 報錯keyerror)

ordereddict,可以保持元素的插入順序(dict是無序的),可以實現乙個有容量的先進先出的dict容器。

chainmap把一組dict串起來,本身也是乙個dict,查詢時按順序在內部dict依次查詢。

知識點:vars(object)返回乙個dict

counter 計數器,統計字元出現的次數

常見的二進位制編碼方式

用64個字元表示任意二進位制資料,bytes --> str

每三個位元組一組 3 * 8 bit = 24 bit (不足3個位元組,用\x00補足,再在字元結尾加上相應數量的=,解碼時再去掉),然後分為4個部分,24bit / 4 = 6bit,然後找到對應的字元6bit -> char

長度增加33%,好處:文字可以在郵件 web頁面顯示

import base64

標準的base64編碼後,可能出現+ 、/ 字元,不能在url裡做引數,所以還有 url safe版本的base64.把+、/ 變成了 -、_。

還可以自定義base64編碼。

base64 是通過查表的編碼方式,不能用於加密,應用於小段內容的編碼,如數字證書簽名、cookie,網頁中少量的二進位制資料。

有些為了url把末尾的=去掉了,這時解碼時,會找4的倍數的字元,查詢缺少的=

python沒有本身的處理位元組資料的方法。b』str』 = 位元組陣列,c中就可以很方便的用struct 、union處理位元組,轉換int float --> bytes

struct 模組處理二進位制向其他二進位制資料型別轉換。

摘要演算法(雜湊演算法 雜湊演算法) md5, sha1

對任意長度資料轉換成乙個固定長度資料

碰撞有可能發生,從摘要反推原資料或摘要相同的資料非常困難。

應用,存使用者口令,不適用原明文,而用摘要儲存

為避免使用者口令過於簡單,可以「加鹽」

如果兩個使用者的口令相同呢?可以在『鹽』裡加使用者名稱資訊

對雜湊演算法加鹽,即混入key(一般隨機得到)

操作迭代物件

1.無限迭代 count(1)

2.cycle() 把乙個序列無限迴圈下去

3.repeat() 把乙個元素無限重複下去,可以規定重複的次數

4.takewhile()根據條件判斷來擷取乙個有限序列

5.chain() 把一組迭代物件串起來

6.groupby() 把迭代器中相鄰的重複元素(根據函式得key)調出來放到一起

import itertools

defpi

(n):

uneven = itertools.count(1,

2)limit = itertools.takewhile(

lambda x:x <

2* n +

1,uneven)

madd =

true

#可以把limit轉換成list根據index,換+/-,也可以根據元素跟4的關係換+/-

msum =

0for v in limit:

if madd:

msum +=4/v

else

: msum -=4/v

madd =

not madd

return msum

print

(pi(10)

)print

(pi(

100)

)print

(pi(

1000))

print

(pi(

10000))

# assert 3.04 < pi(10) < 3.05

# assert 3.13 < pi(100) < 3.14

# assert 3.140 < pi(1000) < 3.141

# assert 3.1414 < pi(10000) < 3.1415

# print('ok')

# 3.0418396189294032

# 3.1315929035585537

# 3.140592653839794

# 3.1414926535900345

知識點:

if 10 < a < 13:

print(』–hello–』)

並不只是open的file才可以with,只要實現了上下文管理的就可以用with語句。

實現方法:

1.__enter__和__exit__在class中實現。

2.註解@contextmanager,這個裝飾器需要裝飾乙個生成器generator

from contextlib import contextmanager 

@contextmanager

deftag

(name)

:print

("<%s>"

% name)

yield

'jack'

print(""

% name)

with tag(

"h1"

)as name:

print

("hello"

)print

(name)

print

("world"

)# print

#

closing()是乙個經過contextmanager裝飾過的generator,可以把任意物件變為上下文。

操作url

request.urlopen(url) 傳送乙個get請求到指定頁面

request.urlopen(request) 可以新增請求頭,比如模擬某個型號的瀏覽器

傳送請求引數data以bytes形式傳入

request.urlopen(req, data=login_data.encode(『utf-8』))

通過proxy訪問**,需利用proxyhandler

雖然比json複雜,web中也不太多用,但仍有地方用。比如一些配置檔案。

操作xml的方法有兩種 dom vs sax

dom把xml全部讀取,sax是流模式

python淺學筆記2 函式

漢諾塔 時間戳 2019年3月6日23 38 55 常用函式呼叫 abs max float str bool hex isinstance x,int,str 定義乙個函式 使用關鍵字 def 例如 def my abs x if x return x else return x如果沒有retur...

python淺學筆記20 非同步IO

cpu速度遠遠快於 網路 磁碟 io 在乙個執行緒裡,io會阻塞其它 的執行。為了不阻塞,就要用多執行緒或多程序,雖然併發可以解決這個問題,但是系統不能無上限的增加執行緒,系統切換執行緒的開銷也很大 另一種解決問題的方法非同步io,cpu負責 的執行,io操作由io裝置執行,負責開啟乙個io操作,並...

python淺學筆記9 IO程式設計

stringio和bytesio 操作檔案和目錄 序列化 pickling name input output face 磁碟,網路 model stream 流 from to 記憶體 time stop?同步 非同步 由於非同步io比較複雜,本章都是同步io,非同步io在後邊網路伺服器提及。開啟...