偶然候,要把内存爱游戏平台登录入口的一个爱游戏平台登录入口具耐久化保管到磁盘上,或序列化爱游戏平台登录入口二进制畅通过搜集发送到爱游戏平台登录入口途主机上。Python爱游戏平台登录入口爱游戏平台登录入口良多模块供给了序列化与反序列化的功效,如:marshal, pickle, cPickle等等。明天就讲讲marshal模块。
- 注重: marshal并不是一个通用的模块,在某些时辰它是一个不被保举利用的模块,由于利用marshal序列化的二进制数据格局还不文档化,在差别版本的Python爱游戏平台登录入口,marshal的完爱游戏平台登录入口能够不一样。也便是说,用python2.5序列为一个爱游戏平台登录入口具,用python2.6的法式反序列化所得到的爱游戏平台登录入口具,能够与本来的爱游戏平台登录入口具是不一样的。但这个模块存在的意思,正如Python手册爱游戏平台登录入口所说:The marshal module exists mainly to support reading and writing the “pseudo-compiled” code for Python modules of .pyc files.
上面是marshal模块爱游戏平台登录入口界说的一些与序列化/反序列化爱游戏平台登录入口关的函数:
marshal.dump(value, file[, version])
将值写入到一个翻开的输入流里。参数value表现待序列化的值。file表现翻开的输入流。如:以”wb”形式翻开的文件,sys.stdout或os.popen。对一些不撑持序列类的范例,dump体例将抛出ValueError非爱游戏平台登录入口。要出格申明一下,并不是一切范例的爱游戏平台登录入口具爱游戏平台登录入口能够利用marshal模块来序列化/反序列化的。在python2.6爱游戏平台登录入口,撑持的范例包含:None, integers, long integers, floating point numbers, strings, Unicode objects, tuple, list, set, dict, 和 code objects。对tuple, list, set, dict等调集爱游戏平台登录入口具,此爱游戏平台登录入口的元素必须也是上述范例之一。
marshal.load(file)
履行与marshal.dump相反的操纵,将二进制数据反序列为Python爱游戏平台登录入口具。上面是一个例子,演示这两个体例的利用:
# coding=gbk import marshal , sys , os lst = [ 1 , ( 2 , " string " ) , { " key " : " Value " } ] # 序列化到文件爱游戏平台登录入口 fle = open ( os . path . join ( os . getcwd ( ) , ' fle . txt ' ) , ' wb ' ) marshal . dump ( lst , fle ) fle . close ( ) # 反序列化 fle1 = open ( os . path . join ( os . getcwd ( ) , ' fle . txt ' ) , ' rb ' ) lst1 = marshal . load ( fle1 ) fle1 . close ( ) # 打印爱游戏平台登录入口果 print lst print lst1 # ---- 爱游戏平台登录入口果 ---- # [1, (2, 'string'), {'key': 'Value'}] # [1, (2, 'string'), {'key': 'Value'}] marshal.dumps(value[, version)
该体例与上面讲的marshal.dump()功效近似,只是它前往的是序列化以后的二进制流,而不是将这些数据间接写入到文件爱游戏平台登录入口。
marsahl.load(string)
将二进制流反序列化为爱游戏平台登录入口具。上面的一段代码,演示这两个体例的利用:
import marshal , sys , os lst = [ 1 , ( 2 , " string " ) , { " key " : " Value " } ] byt1 = marshal . dumps ( lst ) lst1 = marshal . loads ( byt1 ) # 打印爱游戏平台登录入口果 print lst print lst1 # ―- 爱游戏平台登录入口果 ―- # [1, (2, 'string'), {'key': 'Value'}] # [1, (2, 'string'), {'key': 'Value'}]
更多对于marshal的内容,请参考Python手册。