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 编程》