从文件存取字典,涉及到几个内置函数,对格式的控制

dbfilename = 'people-file'
ENDDB = 'enddb.'  #定义结尾符
ENDREC = 'endrec.'	#定义间隔符
RECSEP = '=>'  #定义对应符

db = {'zhang':{'age':19,'job':'student','wage':5000},
      'zhu':{'age':20,'job':'engineer','wage':6000},
      'liu':{'age':29,'job':'sailsman','wage':10000}}

def (db,dafilename = dbfilename):
    dbfile = open(dbfilename,'w')           #创建文件对象
    for key in db:
        print(key,file=dbfile)
        for (name,value) in db[key].items():#将字典里每一对元素提取出来
            print(name+RECSEP+repr(value),file=dbfile)#打印出来,输出到文件里
        print(ENDREC,file=dbfile)
    print(ENDDB,file=dbfile)
    dbfile.close()

def (dbfilename = dbfilename):
    dbfile = open(dbfilename)
    import sys
    sys.stdin = dbfile  #重定向输入流,从文件读取
    db = {}
    key = input()       #输入大键值
    while key != ENDDB:
        rec = {}
        field = input()
        while field != ENDREC:
            name,value = field.split(RECSEP)#输入小键值加值
            rec[name] = eval(value)         #将值以正确的格式赋给键值
            field = input()
        db[key] = rec
        key = input()
    return db           #返回数据对象

if __name__ == '__main__':#以脚本运行时执行以下函数
    storeDbase(db)
    showdb = loadDbase()
    print(showdb)
 结果:
C:\Python34\python.exe D:/pycharm/one.py
{'zhang': {'job': 'student', 'age': 19, 'wage': 5000}, 'liu': {'job': 'sailsman', 'age': 29, 'wage': 10000}, 'zhu': {'job': 'engineer', 'age': 20, 'wage': 6000}}


Process finished with exit code 0
几个重点:
关于内置函数print(),默认参数如下:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
需要输出的对象,间隔符,结尾符,输出流文件,是否作缓存
本例中需要将字典以特定的分隔符/结尾符输出到文件里


repr()与str的比较:
参考该博客:
http://blog.csdn.net/u013961718/article/details/51100464
总之,即str是显示给人看的,repr()给python看的
例:
for (name,value) in a.items():
    print(name+"=>"+repr(value))
job=>'sailsman' #在python看来他是字符串,因此输出也以该形式输出
wage=>10000
age=>29


for (name,value) in a.items():
    print(name+"=>"+str(value))
job=>sailsman #输出给用户看,用户只需要关心job是什么,并不用关心他是否是字符串
wage=>10000
age=>29


本例中需要如实输出文件里的内容,因此用repr()。另外不可以直接print(name+"=>"+value),因为value可能是int型数据

items()函数将字典里的元素分成每一对:
>>>a.items()
dict_items([('job', 'sailsman'), ('wage', 10000), ('age', 29)])




eval()这里的作用也是起到了格式化的作用,以字符串的形式读进来是这样的:
"job=>'student'"
"wage=>5000"
如果直接 rec[name] = value,
那么输出就是:'job': "'student'", 'wage': '5000'
而加了之后就是:'job': 'student', 'wage': 5000
--参考《Python 编程》

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值