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在後邊網路伺服器提及。開啟...