写这篇文章的原因是 ddcw-ei-v1.1更完了,虽然后面不想写了. 但功能基本上都实现了. 把里面用到的一些技术和常用库分享记录下.
struct
可以按照指定的结构打包或者解包, 不用手动拼接字了(我最开始就是手动拼接的....)
官网连接: https://docs.python.org/zh-cn/3.11/library/struct.html
struct.pack(format,v1,v2,...) 打包
struct.unpack(format,buffer) 解包
例子:
pickle
py对象的二进制序列化.
官网地址:https://docs.python.org/zh-cn/3.11/library/pickle.html
gdbm
dbm数据库? 就是kv形式存数据到文件. 相当于 把dict存储到文件
例子:
代码语言:python代码运行次数:0复制import _gdbm #依赖外部库 gdbm (yum install gdbm)
gdbmobj = _gdbm.open('test20230126.db','cs',0o644) #c:读写方式打开数据库,不存在则创建. s:同步模式
gdbmobj['test'] = b'12345' #值只能是byte or string
socket
这玩意就非常强了. 主要是远程通信.(也可以走本地socket文件)
注意粘包哈, 我被坑过的, 排查了老久...
例子: 打印客户端发送的数据
server:
代码语言:python代码运行次数:0复制import socket
socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #IPV4, TCP
socket_server.bind(('0.0.0.0', 6121)) #绑定端口
socket_server.listen(10) #设置监听数
conn, addr = socket_server.accept() #接收客户端连接(阻塞). 多个连接使用while循环
print(addr[0],addr[1]) #客户端IP,PORT
bdata = conn.recv(1024) #从缓存接收客户端发来的数据1024字节. 这里只取一次, 要持续通信的话,可以单独开个线程来循接收数据
print(bdata)
conn.close()
client
代码语言:python代码运行次数:0复制import socket
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect(('0.0.0.0', 6121)) #连接server
conn.send(b'hell ddcw, are you OK?') #发送数据,也可以加个认证过程. 就是发送特殊的数据,两边都确认了就认证通过了
conn.close()
configparser 和 yaml
configparser 主要是解析.ini .cnf这种配置文件的
configparser解析例子
代码语言:python代码运行次数:0复制import configparser
mysql_config = configparser.ConfigParser()
mysql_config.read('my.cnf') #解析
#保存
with open('my.cnf','w') as f:
mysql_config.write(f)
yaml解析例子
代码语言:python代码运行次数:0复制import yaml
with open(conf_file, 'r', encoding="utf-8") as f:
inf_data = f.read()
conf = yaml.load(inf_data,Loader=yaml.Loader) #返回的是dict格式数据 conf.__str__