python---pickle使用

来源:互联网 发布:怎样修改mac地址 编辑:程序博客网 时间:2024/06/07 06:18

pickle调用
这里写图片描述

这里写图片描述

这里写图片描述
1、新建文件

root@kali:~/python/pickle# lsfuc.pyroot@kali:~/python/pickle# vi acc.pyroot@kali:~/python/pickle# cat acc.pyaccount_info = {'0123456789':['xwb123456',15000,12000],        '9876543210':['xwb654321',20000,18000],        }root@kali:~/python/pickle# lsacc.py  fuc.pyroot@kali:~/python/pickle# root@kali:~/python/pickle# pythonPython 2.7.3 (default, Mar 14 2014, 11:57:14) [GCC 4.7.2] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> acc.account_infoTraceback (most recent call last):  File "<stdin>", line 1, in <module>NameError: name 'acc' is not definedSyntaxError: invalid syntax>>> import acc #引入acc.py文件>>> acc.account_info #查看文件内的信息{'9876543210': ['xwb654321', 20000, 18000], '0123456789': ['xwb123456', 15000, 12000]}>>> acc.account_info['9876543210']#查看账户9876543210内的信息['xwb654321', 20000, 18000]>>> acc.account_info['9876543210'][1]#查看账户9876543210内的第二个元素的值20000>>> acc.account_info['9876543210'][1] = 17000 #修改账户9876543210内的第二个元素的值>>> acc.account_info#查看被修改的元素的值{'9876543210': ['xwb654321', 17000, 18000], '0123456789': ['xwb123456', 15000, 12000]}>>> f = open('acc.log','w')#新建一个新文件,使用覆盖写入方式打开>>> f.write(acc.account_info)#写入信息,提示不是字符信息,无法写入Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: expected a character buffer object>>> s = '%s' % acc.account_info #把acc.account_info信息转换程字符,进行赋值给s>>> s"{'9876543210': ['xwb654321', 17000, 18000], '0123456789': ['xwb123456', 15000, 12000]}">>> f.write(s)#成功写入信息>>> f.close()>>> exit()root@kali:~/python/pickle# more acc.log{'9876543210': ['xwb654321', 17000, 18000], '0123456789': ['xwb123456', 15000, 12000]}root@kali:~/python/pickle# 

2、使用pickle模块操作文件

root@kali:~/python/pickle# lsacc_dump.py  acc.log  acc.py  acc.pyc  fuc.pyroot@kali:~/python/pickle# root@kali:~/python/pickle# cat acc_dump.py#!/usr/bin/python#---*-- coding:utf-8 --*--import pickle#导入pickle模块#定义字典信息account_info = {'0123456789':['xwb123456',15000,12000],        '9876543210':['xwb654321',20000,18000],        }f =open('pickle_file1.pkl','wb')#使用二进制覆盖写入方式打开pickle_file1.pklpickle.dump(account_info,f)#使用dump方式把account_info的信息放到pickle_file1.pkl文件中f.close()root@kali:~/python/pickle# root@kali:~/python/pickle# cat acc.pyaccount_info = {'0123456789':['xwb123456',15000,12000],        '9876543210':['xwb654321',20000,18000],        }root@kali:~/python/pickle# root@kali:~/python/pickle# root@kali:~/python/pickle# lsacc.log  acc.py  acc.pyc  fuc.pyroot@kali:~/python/pickle# vi acc_dump.pyroot@kali:~/python/pickle# python acc_dump.pyroot@kali:~/python/pickle# lsacc_dump.py  acc.log  acc.py  acc.pyc  fuc.py  pickle_file1.pklroot@kali:~/python/pickle# cat pickle_file1.pkl (dp0S'9876543210'p1(lp2S'xwb654321'p3aI20000aI18000asS'0123456789'p4(lp5S'xwb123456'p6aI15000aI12000as.root@kali:~/python/pickle# 

3、可以避免pickle序列化重复多次写入问题

root@kali:~/python/pickle# lsacc_dump.py  acc_load.py  acc.log  acc.py  acc.pyc  fuc.py  pickle_file1.pklroot@kali:~/python/pickle# root@kali:~/python/pickle# cat pickle_file1.pkl (dp0S'9876543210'p1(lp2S'xwb654321'p3aI3777aI18000asS'0123456789'p4(lp5S'xwb123456'p6aI15000aI12000as.root@kali:~/python/pickle# python acc_load.py{'9876543210': ['xwb654321', 3777, 18000], '0123456789': ['xwb123456', 15000, 12000]}{'9876543210': ['xwb654321', 8777, 8777], '0123456789': ['xwb123456', 15000, 12000]}root@kali:~/python/pickle# cat pickle_file1.pkl (dp0S'9876543210'p1(lp2S'xwb654321'p3aI8777aI8777asS'0123456789'p4(lp5S'xwb123456'p6aI15000aI12000as.root@kali:~/python/pickle# cat acc_load.pyroot@kali:~/python/pickle# cat acc_load.py#!/usr/bin/python# --*-- coding:utf-8 --*--import pickle#可以避免pickle文件重复写读出现问题的处理方式:1、是先只读打开,取完信息,关闭文件2、在写入方式打开文件操作f = open('pickle_file1.pkl','r')# 使用只读方式打开account_info = pickle.load(f)#使用pickle的load方式把pickle_file1.pkl导入account_info中print account_info#打印赋值前的account_infof.close()account_info['9876543210'][1] = 8777#把account_info中账户9876543210的第二个值赋值为1777account_info['9876543210'][2] = 8777#把account_info中账户9876543210的第三个值赋值为1777print account_info#打印赋值后的account_infof = open('pickle_file1.pkl','w')#2、覆盖式写入文件信息pickle.dump(account_info,f)#重新dump回到文件中f.close()root@kali:~/python/pickle# 
原创粉丝点击