pyhton -pickle使用方法
新建文件:
root@kali:~/python/atmnew# ls
account.log account.pkl account.py logger.py logger.pyc pickle_test.py record_account.py
root@kali:~/python/atmnew#
1、账户登录与识别
root@kali:~/python/atmnew# cat account.py
#!usr/bin/python
# --*-- coding:utf-8 --*--
'''用户账户信息'''
import pickle#导入持久化序列模块
#新建字典,第一个元素是帐号信息,账户对应的第一个值为登录密码,第二值为信用卡额度,第三个值为可用额度
account_info = {'0123456789':['xwb123456',15000,12000],
'9876543210':['xwb654321',20000,18000],
}
f = open('account.pkl','wb')#对account.pkl文件使用二进制写入方式打开,也可以w+打开
#把字典account_info文件dump到打开的account.pkl文件中去。就是把字典account_info文件所有状态信息写入account.pkl文件中去,
#下次使用,直接从account.pkl文件中取出来,他就是一个字典信息,也是等于格式化存储到account.pkl文件中
pickle.dump(account_info,f)#使用pickle方式把字典account_info文件dump到打开的account.pkl文件中去。
f.close()
root@kali:~/python/atmnew#
2、交易函数与记录
root@kali:~/python/atmnew# cat record_account.py
#!/usr/bin/python
# --*-- coding:utf-8 --*--
import pickle
import time,logger#日志模块
#第一步导入时间
pkl_file = open('account.pkl','rb')#只读二进制方式打开account.pkl文件,读取二进制形式到pkl_file文件中
account_list = pickle.load(pkl_file)#使用pickle加载二进制文件pkl_file,到字典account_list中
pkl_file.close()#关闭文件
#对账户和花费金额进行消费。记账功能
def recon(account,cost_amount):
#
pkl_file = open('account.pkl','wb')#写入二进制方式打开account.pkl文件,读取二进制形式到pkl_file文件中
old_position = account_list[account][2]#取出字典account_list中账户0123456789的第三个值可用额度12000赋值给old_position
new_position = old_position - cost_amount#使用可用额度old_position减去消费金额cost_amount,为更新后可用额度new_position
account_list[account][2] = new_position#把更新后的可用额度new_position,赋值给字典account_list中账户0123456789的第三个值可用额度
print new_position
pickle.dump(account_list,pkl_file)#使用pickle方法把字典account_list数据dump到pkl_file文件中
pkl_file.close()#关闭文件
print account_list
#把程序分成不同.py文件模块,非常方便进行日后维护
recon('0123456789',450)#调用账户0123456789,消费金额450元
logger.record_log('0123456789',450,'NIKE shoes')#记录日志账户0123456789消费450元,购买NIKE shoes物品
root@kali:~/python/atmnew#
3、日志文件
root@kali:~/python/atmnew# cat logger.py
#!/usr/bin/python
# --*-- coding:utf-8 --*--
import time#导入时间模块
logfile = 'account.log'#定义要使用的日志文件account.log
#定义函数包括参数账户、花费、描述信息、利息(默认为0、取款、转账有手续费必须带参数值)
def record_log(account,expense,description,interest = 0):
date = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())#取出当前时间
record_line = "%s '%s' %s %s\n" %(date,description,expense,interest)#记录当前消费时调用函数各个参数时间行为
f = open(logfile,'a')#追加写入方式打开日志account.log
f.write(record_line)#写入每行函数产生日志信息
f.flush()#实时写入
f.close()#关闭文件
root@kali:~/python/atmnew#
4、待补充文件内容
root@kali:~/python/atmnew# cat account.pkl
root@kali:~/python/atmnew# cat account.log
1
root@kali:~/python/atmnew# cat pickle_test.py
1
root@kali:~/python/atmnew#