python进阶--月考四
- (一)创建my_web.py,使用socket以及多线程,完成以下需求
- (二)创建my_gen.py,使用python装饰器完成如下需求
- (三)创建my_process.py,使用python多进程完成如下需求,文件批量复制
- (四)创建my_test.py,完成以下推导式
(一)创建my_web.py,使用socket以及多线程,完成以下需求
1.创建数据库,表自定义,字段包括ip,port,记录时间
2.实现简单的web静态服务器
3.定义入库函数to_sql,将客户端的ip,端口port,写入到mysql中
4.定义查询函数read_sql,将表内的所有信息进行返回,并根据时间进行排序
5.以多线程的方式运行所有函数
6.根据浏览器的不同接口返回对应的信息
import datetime
import multiprocessing
import socket
import threading
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='12345678',
db='chat'
)
cursor = conn.cursor()
def to_sql(ip,port,time1):
sql = f"insert month_4(ip,port,time1) values('{ip}','{port}','{time1}')"
cursor.execute(sql)
conn.commit()
str1 = 'HTTP/1.1 200 Ok\nServer:zb\n\n成功'
cliet.send(str1.encode(encoding='gbk'))
def read_data():
sql = "select * from month_4 order by time1;"
cursor.execute(sql)
datastr = cursor.fetchall()
str1 = f'HTTP/1.1 200 Ok\nServer:zb\n\n{datastr}'
cliet.send(str1.encode(encoding='gbk'))
if __name__ == '__main__':
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('127.0.0.1',9008))
server.listen(128)
cliet,ip = server.accept()
requst = cliet.recv(1024).decode()
print(requst)
path = requst.split(' ')[1]
if path == '/to_sql':
thre1 = threading.Thread(target=to_sql,args=(ip[0],ip[1],datetime.datetime.now()))
thre1.start()
thre1.join()
elif path == '/read_sql':
thre1 = threading.Thread(target=read_data)
thre1.start()
thre1.join()
(二)创建my_gen.py,使用python装饰器完成如下需求
1.定义一个读取附件test.txt的函数,依次读取文件,每次只能读取一行内容
2.定义一个记录函数执行次数的装饰器,将执行的次数写入到本地文件中,格式为函数名称,执行的次数为xx
3.定义一个日志装饰器,将1中的函数执行的结果写入到本地文件中
4.定义一个让函数变慢的装饰器,装饰日志装饰器即可,参数为需要变慢的时间
5.先需要执行2装饰器,3装饰器后执行,保证执行效果
import time
from functools import wraps
count1 = 0
flag = 0
def count(fn):
@wraps(fn)
def inner(*args,**kwargs):
global count1
str1 = fn(*args,**kwargs)
with open('次数.txt','w') as f:
f.write(f'{count1}')
count1+=1
return str1
return inner
def slow(mytime):
def outer(fn):
@wraps(fn)
def inner(*args, **kwargs):
time.sleep(mytime)
str1 = fn(*args, **kwargs)
return str1
return inner
return outer
@slow(mytime=3)
def loggin(fn):
@wraps(fn)
def inner(*args,**kwargs):
str1 = fn(*args,**kwargs)
with open('日志.txt','a') as f:
f.write(f'{str1}')
return str1
return inner
@loggin
@count
def show():
global flag
with open('test.txt','r') as f:
f.seek(flag)
str1 = f.readline()
flag += len(str1)+1
return str1
if __name__ == '__main__':
while True:
str1 = show()
if not str1:
break
(三)创建my_process.py,使用python多进程完成如下需求,文件批量复制
1.读取附件中文件的详细信息,合理的方式进行存储
2.创建一个新的文件夹,多次创建需要捕获异常
3.获取待复制的文件的名字
4.创建多进程开始复制功能
5.文件复制的函数需要单独定义
import multiprocessing
import os
def copy_file(i):
with open(f'复制/{i}', 'rb') as f:
with open(f'b/{i}', 'wb') as f2:
f2.write(f.read())
if __name__ == '__main__':
try:
os.mkdir('b')
except FileExistsError as e:
print('文件夹已存在')
files = os.listdir('复制')
for i in files:
print(f'要复制的文件名是:{i}')
pro1 = multiprocessing.Process(target=copy_file, args=(i,))
pro1.start()
pro1.join()
(四)创建my_test.py,完成以下推导式
l1=[(i,i+1) for i in range(5)]
print(l1)
l2=[i**2 for i in range(50) if i%3==0]
print(l2)
set3=[{'科目':'政治', '成绩':98}, {'科目':'语文', '成绩':77}, {'科目':'数学', '成绩':99}, {'科目':'历史', '成绩':65}]
l3=[i for i in set3 if i.get('成绩')>=70]
print(l3)
list4=[[1,2,3],[4,5,6],[7,8,9]]
l4=[list4[i][i] for i in range(3)]
print(l4)
l5=[f'{a}{b}{c}' for a in range(1,4) for b in range(1,4) for c in range(1,4) if a!=b and a!=c and b!=c]
print(l5)
set6={"a":10,"B":20,"C":True,"D":"hello world","e":"python教程"}
s6={k:v for k,v in set6.items() if k.islower()}
print(s6)
cookies = "anonymid=jy0ui55o-u6f6zd;depovince=GW;_r01_=1;"
s7 = {i.split('=')[0]: i.split('=')[1] for i in cookies.split(';') if i!=''}
print(s7)
dict_a = {'a': 2, 'B': 5, 'A': 7, 'C': 10}
l8={k.upper():dict_a.get(k.upper(),0)+dict_a.get(k.lower(),0) for k,v in dict_a.items()}
print(l8)
name = ['zhangsan', 'lisi', 'wangwu', 'maliu']
sign = ['双鱼座', '天蝎座', '水瓶座', '巨蟹座']
l9={name[i]:sign[i] for i in range(len(name))}
print(l9)
l10=(i**0.5 for i in range(1,101))
print(list(l10))