2018.04.09 知識回顧

1.回顧知識點

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 : 非空格的 字符

        ^ : 行首, 開始位置

        $ :行尾, 結束位置

  1. 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 ) ) 操作時的安全性, 即在一個資源在加鎖後,只能有一個線程來佔用,其他線程則等待鎖的釋放。

1)創建鎖: lock = threading.Lock ()
2)加鎖:lock.acquire ()
n += 20
3)解鎖: lock.release()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章