python3 pickle & struct
import pickle
pickle是用来把python原生的对象存在硬盘里
>>> print(D) {'cisco': 1, 'python': 2, 'ericsson': 3} >>> import pickle >>> F=open('pickle_test.pkl', 'wb') >>> pickle.dump(D,F) >>> F.close() >>> F=open('pickle_test.pkl','rb') >>> E=pickle.load(F) >>> E {'cisco': 1, 'python': 2, 'ericsson': 3} >>>
用pickle.dump()把字典D这个python对象存储进pickle_test.pkl,该pkl文件是存在硬盘上的
后面用pickle.load()再把硬盘上的文件打开
pickle这种方式,只能用来存储python的对象,C语言的对象看不了,可以用XML或者JSON来存储数据,其他语言也是可以看的
####################################################
struck可以用来构造tcp头部
参考博客:
https://www.cnblogs.com/gala/archive/2011/09/22/2184801.html
>: 网络字节序:左侧是高位,右侧是低位
<: 主机字节序:左侧是低位,右侧是高位
i: 整数,占4个字节,目的是把7放在4个字节里,即序列号要是7 - i对应的是7
s: 字符,4s即四个字母,一个字母占一个字节 - 对应的是b'spam'
h: 整数,两个字节,对应的是8,网络编程里可能对应的是端口号
b'spam': 二进制的spam
写入了一共10个字节:4+4+2
>>> F=open('data.bin','wb') >>> import struct >>> data=struct.pack('>i4sh',7,b'spam',8) >>> data b'\x00\x00\x00\x07spam\x00\x08' >>> F.write(data) 10 >>> F.close() >>> F=open('data.bin','rb') >>> data=F.read() >>> data b'\x00\x00\x00\x07spam\x00\x08' >>> values = struct.unpack('>i4sh',data) >>> values (7, b'spam', 8) >>>
这种方法比较原始,比较麻烦,有其他更高级的方法来构造TCP数据包