1.正則相關的函數
r = re.match('正則表達式',源字符串) # 返回正則對象,如果匹配失敗,返回None
r.group () # 返回是符合正則的源字符串
r.groups () # 返回符合正則源字符串中的 分組信息 ' () ' ,以tuple元組格式返回
r.groupdict () # 返回符合正則 (帶有分組且有分組名: (?P<分組名>正則 ) ) 的源字符中分組字典信息。
I = re.split( '正則', '源字符串' ) # 返回 以正則表示的字符分源字符串之後的列表
s = re.sub ( '正則 ',新字符, 源字符串 ) # 返回 將源字符串中符合正則的字符替換成新字符之後的字符串
s = re.subn ('正則' ,新字符, 源字符串) # 同sub(),返回元組(替換後的字符,替換次數)
sl = re.findall ('正則','源字符串') # 查找源字符串中符合正則的字符,並返回list, 如果正則中包含分組(),分組的信息以元組tuple方式顯示在列表
常用的正則元字符:
[a-zA-Z] : 表示一位任意一位的字母和下劃線,表示位數可以使用:
*:(0到多個)
?:(0或者1位)
+:(至少一個)
{n,}: (至少n個)
{n,m}: n到m個
. : 除了特殊符號以外,任意一個字符
[0-9] : 表示一位數字, 等同於 \d
[0-9a-zA-Z _ ] : 數字字母及下劃線,及 \w
[^0- 9] : 非數字的任意字符, 等同於 \D
[0-9a-zA-Z _ ] :非數字、字母、下劃線的任一字符, \W
\s : 空格、換行、換頁、製表 等有空格符號
\S : 非空格的 字符
^ : 行首, 開始位置
$ :行尾, 結束位置
socket 網絡通信 (基於網絡)
socket_family: AF_INET
type: SOCK_STREAM , 主要用於TCP協議的數據傳輸
1). TCP 通信
面向連接、數據是序列化(二進制方式、字節流bytes),且是連續的,可多次發送
服務端:
s = socket.socket ()
s.bind((host, port ))
s.listen(10) # 10 表示, 允許最大連接數
client, addr = s.accept () 等待客戶端的連接, 會阻塞。
解決方案:可以設置等待連接的超時時間在accept()方法的上方設置:s.settimeout(30),默認單位爲秒
client.send(b 'hi')
data = client.recv ( 1024 ) # 一次從客戶端讀取1024字節,即1 k byte
while data:
data = client.recv(1024) # 發送數據結束時,必須發送 “ ” 帶空格的字符串
服務端:
s = socket.socket ( )
s.connect ( (host, port) ) # 連接服務器
s.send ( '發送數據'.encode() )
s.send ( b' ' )
data = s.recv (1024) # 接收數據
print (data.decode() )
3.多線程
1)創建線程
t1 = threading.Thread (target=函數名, args=(參數,))
2)啓動線程
t1.start ()
3) 等待線程結束
t1.join () # 當前線程等待 t1 線程結束
4)線程鎖 (Lock) :
來保護多個線程對同一資源(變量,對象, 可迭代的對象/數據( iterable ) ) 操作時的安全性, 即在一個資源在加鎖後,只能有一個線程來佔用,其他線程則等待鎖的釋放。