python 常用库使用(1)

2023-02-02 17:06:03 浏览数 (2)

写这篇文章的原因是 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__

0 人点赞