复习day18
正则表达式:
1.正则符号
. - 匹配任意字符
\w - 匹配一个ASCII表中字母、数字、下划线,还可以匹配一个所有非ASCII表字符
\s - 匹配一个空白字符
\d - 匹配一个数字字符
\b - 检测单词边界(检测\b所在的位置是否是单词边界)
^ - 检测是否是字符串开头
$ - 检测是否是字符串结尾
\W - 匹配非数字、字母、下划线
\S - 匹配非空白字符
\D - 匹配非数字字符
\B - 检测是否是非单词边界
[] - 匹配一个中括号中的任意的一个字符
*,+,?,{N},{M,N},{M,},{,N} -- 贪婪
*?,+?,??,{N}?,{M,N}?,{M,}?,{,N}? -- 非贪婪
正则1|正则2
()分组
2.re模块
- 完全匹配re.fullmatch()
- 匹配字符串开头re.match()
- 查找re.search()
- 搜索re.findall() .re.finditer
- 分割:re.split()
- 替换:re.sub()
一 .socket(套接字)
1 .什么是socket
- socket有叫套接字,指的就是网络通信的两端,分别是服务器和客户端
- socket编程指的就是通过代码实现客户端和服务器之间的通信
2.服务器的实现
import socket
2.1创建套接字对象
family: ip类型 AF_INET -> ipv4
type : 传输协议 ,sock_STREAM -> TCP , SOCK_DGRAM -> UDP
s = socket.socket()
2.2 绑定ip地址和端口
IP用来区分互联网上的设备
端口用来区分一台计算机上的不同服务(应用)
值是0-65535,其中0-1024是著名端口
bind((IP地址,端口号))
s.bind(('10.7.190.74', 8080))
2.3启动服务器
listen(数量) - 这儿的数量指的是一次性能够处理的最大请求数
s.listen(255)
print('开始监听')
2.4让服务器一直处于运行状态
while True:
'''
# 2.5 等待客户端的请求
- 程序运行到这个地方,会停下来,等待有客服端来连接服务器,才会接着往后运行
'''
connect,addr = s.accept()
print(connect,addr)
'''
# 2.6 发送消息
send(数据) -发送数据,数据是二进制数据
'''
msg ='我杨XX不服'
connect.send(msg.encode(encoding='utf-8'))
"""
# 2.7.接收消息
recv(字节数) -接收数据,并指定一次性接收的数据大小的最大值,返回接收的二进制数据
"""
date = connect.recv(1024)
print(date.decode(encoding='utf-8'))
"""
# 7.关闭连接
"""
connect.close()
break
3. 创建客服端套接字
3.11.创建套接字对象
import socket
c = socket.socket()
'''
# 连接服务器
'''
c.connect(('10.7.190.170', 8080))
'''
# 3.接收消息
'''
date = c.recv(1024)
print(date.decode(encoding='utf-8'))
'''
# 4.发送消息
'''
msg = '我杨XX不服'
c.send(msg.encode(encoding='utf-8'))
c.close()
- 例子:
- server
import socket
s = socket.socket()
s.bind(('10.7.190.74', 8080))
s.listen(255)
msg1 = ['来了 老弟', '咋了?', '被人煮了!','我杨XX不服', '拜拜']
while True:
c, addr = s.accept()
print(addr,'连接成功')
count = 0
while True:
msg = msg1[count]
c.send(msg.encode())
date = c.recv(1024).decode()
if date == '拜拜':
break
print('客户端:', date)
count += 1
- client
import socket
c = socket.socket()
c.connect(('10.7.190.74', 8080))
while True:
date = c.recv(1024)
print(date.decode(encoding='utf-8'))
msg = input('>>')
c.send(msg.encode(encoding='utf-8'))
二. requests
- 根据网络接口请求数据:通过第三方库requests提供的方法
import requests
r = requests.get('URLxxxxxx')
# print(r)
# 1获取字符串形式的数据结果
# print(r.text)
# 2 获取二进制数据
data = r.content
print(data)
# 3获取json数据
msg = r.json()
# print(msg['data'])
for x in msg['data']:
print(x['name'],x['text'])
三.Thread(多线程)
'''
1 什么是进程
一个正在运行的程序就是一个进程.系统会给每个进程分配一个独立的内存区域,用来保存程序运行过程中产生的数据
当进程结束的时候,这个内存区域会自动销毁
2 什么是线程
进程想要执行任务,就必须要有线程.每个进程默认都有一个线程,这个线程叫主线程,其他的线程叫子线程
程序默认都是在主线程中执行的
- 一个线程中执行多个任务 任务是串行执行的额(一个一个的按顺序执行)
- 一个进程中如果有多个线程,多线程执行不同任务的时候是并行的(同时进行的)
3 Python中怎么使用多线程
- python 通过内置的threading模块来提供多线程相关技术
- 其中有一个Thread,这个类的对象就是线程对象
import threading
# import datetime
from datetime import date,time,datetime
from time import sleep
def download(film):
print(threading.current_thread())
print('开始下载:%s time:%s'%(film,str(datetime.now())))
sleep(5)
print('%s下载完成 time:%s'%(film,str(datetime.now())))
'''
# 在主线程中下载两个电影:一个一个的下载,一个下载完才下载另一个.总耗时两个耗时的和
# download('大国崛起1')
# download('大国崛起2')
'''
'''
#1 直接创建线程类的对象
a.语法
线程对象 = threading.Thread(target=函数,args =参数) - 创建一个线程对象并且返回
b,说明
函数 - function类型的变量;这个函数的函数体就会在子线程中执行
参数 - 元祖:参数会传给target对应的函数
'''
t1 = threading.Thread(target=download,args=('大国崛起',))
t2 = threading.Thread(target=download,args=('小猪佩奇',))
t3 = threading.Thread(target=download,args=('舞出人生',))
'''
# 2.让线程开始执行任务
线程对象.start() - 开始执行子线程中的任务
'''
t1.start()
t2.start()
t3.start()
print(threading.current_thread())
'''
# 某个线程出现异常,是线程直接结束,进程不一定结束,所有线程都结束,进程才会结束
'''
3.创建线程子类
from threading import Thread ,current_thread
from time import sleep,time
from random import randint
'''
1)申明一个类继承自Thread
2)重写run方法,这个方法中的任务就是需要在子线程中执行的任务
3)创建当前类的对象,就是线程对象
'''
class DownloadThread(Thread):
def __init__(self,film):
super().__init__()
self.film = film
def run(self):
print('%s开始下载'%self.film)
time1= randint(5,10)
sleep(time1)
print('%s下载结束,总耗时%d秒'%(self.film,time1))
'''
# 2.创建线程对象
'''
t1 = DownloadThread('opencv')
t2 = DownloadThread('python')
'''
# 3.启动线程
线程对象调用start会自动在子线程中去调用run方法
直接用线程对象调用run方法,run方法会在主线程中执行
'''
start = time()
# t1.start()
# t2.start()
'''
4.join的用法
线程对象.join() -- 程序执行到这个地方会停下来(线程会阻塞),直到线程对象
中的任务执行完成后才会执行后面的语句
'''
# t1.join()
# t2.join()
# end = time()
# print(end-start)