一:正则表达式
闭包操作符
-
| 等同于 or exp:a|b|c
-
. 匹配任意一个字符 (若匹配本字符,需转义使用 . 不能匹配换行符 及空字符串)
-
(^:匹配首部【:匹配首部 B:匹配任意位置】 $:匹配尾部)
-
[abc]:匹配中括号内任意字符 ^置于首位表示不取该字符
-
-连接:表字符范围 exp: A-Z 0-9
-
*:表示0次或多次 +:表示一次或多次 ?: 表示0次或1次
-
d:表十进制数字匹配 w:表字符数字的字符集匹配 s:表示空格字符匹配 (大写表取反)
-
(?...)表示对匹配字符串进行筛选
re.I :使匹配对大小写不敏感
r:Python中字符串前面加上 r 表示原生字符串(rawstring)原因:阿斯克码值和特殊字符存在冲突
#match:从起始部分对字符串进行匹配,匹配失败,抛出Attribute Error异常 (pattern,string)
#search:从字符串任一位置进行匹配
#findall:返回所有符合匹配的字段
#sub/subn:用字符串替换匹配的字段,subn返回匹配个数
group():返回匹配的字段、groups():以数组形式返回匹配字段
二:网络编程
套接字:通信端点 (基于文件【单机】和基于网络的【联机】)TCP:有连接(电话) UDP:无连接(邮寄)
socketServer:处理socket请求的多线程
套接字设置阻塞模式和非阻塞模式:
阻塞模式缺点:套接字线程较多时,通信较困难,扩展性较差
非阻塞模式缺点:需要处理返回的阻塞错误 优点:多个连接,数据传送不平均,时间不定
发送和接收数据时,需要进行加密解密
#server.py
1 from socket import * 2 from time import ctime 3 4 HOST = '' #接收所有地址 5 PORT = 21567 6 BUFSIZE = 1024 7 ADDR = (HOST,PORT) 8 9 tcpSerSock= socket(AF_INET,SOCK_STREAM) 10 tcpSerSock.bind(ADDR) 11 tcpSerSock.listen(5) #最大连接数 12 13 while True: 14 print('waiting for connection') 15 tcpCliSock,addr = tcpSerSock.accept() 16 print('...connected from ',addr) 17 while True: 18 #接收数据解密 19 data = tcpCliSock.recv(BUFSIZE).decode() 20 if not data: 21 break 22 #发送数据加密 23 tcpCliSock.send(('[%s] %s' % (ctime(),data)).encode()) 24 tcpCliSock.close() 25 tcpSerSock.close()
#client.py
1 from socket import * 2 HOST = '127.0.0.1' 3 PORT = 21567 4 BUFSIZE = 1024 5 ADDR = (HOST,PORT) 6 tcpCliSock = socket(AF_INET,SOCK_STREAM) 7 tcpCliSock.connect(ADDR) 8 9 while True: 10 data = input('>') 11 if not data: 12 break 13 #传送数据加密 14 tcpCliSock.send(data.encode()) 15 #接收数据解密 16 data = tcpCliSock.recv(BUFSIZE).decode() 17 if not data: 18 break 19 print(data) 20 tcpCliSock.close()
三:客户端编程
FTP:文件传输协议 (允许匿名用户登录) 底层使用两个套接字进行通信,包括命令端口和数据端口
UseNet:全球电子公告板,基于UUCP协议传输(Unix——Unix)
电子邮件系统
MTA:消息传输代理,在交换主机上运行的服务器进程。为实现传送目的,需要确定两个目的,
1.如何找到对接主机的MTA 由域名服务来查找目的域名
2.如何进行通信 统一SMTP(简单邮件传输)协议,通过MTS(消息传输系统)进行通信
POPIMAP:客户端和服务端访问协议