day01先睹为快(上)
一、概述
python,进来非常火爆的一门编程语言,在尝试了一些编程语言之后,在熟悉了一系列python基础之后,决定以其为主要工具开展工作,于是拿起《python 编程》,跟我一起走进python的编程世界吧
首先一起构建一个保存和记录信息的数据库,通过一步步编程实现:交互式编程、命令行工具,控制台界面,GUI和简单的网页界面。一路下来熟悉数据表示、对象持久化和面向对象编程等相关概念。
二、任务概述
由于工作需求,要求记录员工的信息,通过程序来管理这些员工信息
1、表示记录
python中表示数据的方式很多,一般会使用列表和字典
1)列表
xxho=["小小海鸥",26,8000,"IT"]
yhm=["张家辉",44,9000,"hardware"]
以上就创建了两条记录,每条记录包含了四个属性的列表【姓名、年龄、工资、职业】,通过列表的索引访问这些属性,对这些属性可以进行后续的操作
xxho=["小小海鸥",26,8000,"it"]
yw=["叶问",44,92000,"咏春"]
#获通过碎银取对应的属性
print(xxho)
print(yhm)
print(xxho[1]) #获取xxho对象的年龄属性,并在控制台输出
print(yw[0]) #获取yhm对象的name属性,并在控制台输出
2)数据库列表
目前为止仅仅是创建了两个列表变量,不是数据库,因此创建一个新列表person来存储这两个变量,这个新的person列表就是数据库,通过对这个新列表进行相应的操作实现对数据的增删改查
1 xxho=["小小海鸥",26,8000,"it"]
2 yw=["叶问",44,92000,"咏春"]
3
4 #获通过碎银取对应的属性
5
6 print(xxho[1]) #获取xxho对象的年龄属性,并在控制台输出
7 print(yhm[0]) #获取yhm对象的name属性,并在控制台输出
8
9 #创建一个新的person列表
10 person=[xxho,yhm]
11
12 #通过对应的相对位置来获取值
13 print(person[0][0]) #获取xxho的name属性
14
15 #通过for循环来处理每一条记录
16
17 for person in people:
18 print(person[0]) #获取每个对象的名字
19 person[2]*=1.20 #每个人的工资涨幅20%
以上我们就可以保存和修改相应的人员信息,实现了信息的管理,但是列表中的人员信息只能暂时存储的对象,当pytho程序运行结束后就消失了,每次想要修改对应的属性时,必须重复写入修改的代码,所以还有很大的改善和优化空间。
而且我们访问对象对应的属性是通过对应的列表索引,所以每次都要确认下索引和属性的对应关系。
(3)针对列表存在的这些缺点,python字典可以完美解决以上问题
通过字典存储人员的信息和查看对应的属性
1 #创建字典对象
2 xxho={"name":"小小海鸥","age":26,"pay":8000,"job":"IT"}
3 zjh={"name":"张家辉","age":44,"pay":82000,"job":"actor"}
4
5 #获得字典对应的值 通过key访问value
6 print(zjh["name"])
7 print(zjh["age"])
8 print(zjh["pay"])
创建字典几种方法
1 #1、直接通过键值对和{}创建
2 xxho={"name":"小小海鸥","age":26,"job":"IT"}
3
4 #通过key访问value
5 print(xxho["name"])
6 print(xxho["age"])
7 print(xxho["job"])
8
9 #2、通过dict关键字创建
10 yw=dict(name="叶问”,age=24,pay=3200,job="咏春")
11 print(yw)
12
13 #3、创建空字典,一个个添加对应的属性
14
15 lxl={}
16 lxl["name"]="李小龙"
17 lxl["age"]=80
18 lxl["pay"]=12000
19
20 print(lxl)
(4)字典的字典
以上创建的字典仅仅是两个字典对象,同样创建一个字典列表,存储这两个字典对象构建数据库
1 #创建字典对象
2 xxho={"name":"小小海鸥","age":26,"pay":8000,"job":"IT"}
3 yw={"name":"叶问","age":44,"pay":82000,"job":"咏春"}
4
5 db={}
6
7 db["xxho"]=xxho
8 db["yw"]=yw
9
10 #获取yw的名字
11 print(db["yw"]["name"])
2、持久存储记录
以上应用字典的方法存储表示记录数据库,为使得人员信息持久化,需要将人员信息保存在某种类型的文件当中
1)创建一个initdata.py文件
1 #记录信息
2 bob={"name":"bob smith","age":36,"pay":3000,"job":"dev"}
3 xxho={"name":"小小海鸥","age":26,"pay":8000,"job":"IT"}
4 yw={"name":"叶问","age":36,"pay":3000,"job":"咏春"}
5
6
7 #创建数据库
8 db={}
9 db["bob"]=bob
10 db["xxho"]=xxho
11 db["yw"]=yw
12
13 if __name__=="__main__":
14 for key in db:
15 print(key,"==>",db[key])
2)格式化数据脚本
将存储在内存中的数据,写入到文件当中,以便于永久保存
创建一个make_db_file.py文件
1 """
2 将内存数据库对象保存到文件当中,假定不使用“endrec.”,“enddb.”和“==>”
3 """
4
5 dbfilename="people_file"
6 ENDDB="enddb."
7 ENDREC="endrec."
8 RECSEP="=>"
9
10 def storDbase(db,dbfilename=dbfilename):
11 """
12 将数据库保存到文件当中
13 :param db:要保存的db字典
14 :param dbfilename:保存的文件
15 :return:
16 """
17 with open(dbfilename,mode="w",encoding="utf-8") as f:
18 for key in db:
19 f.write(key+"\n")
20 for key,value in db[key].items():
21 f.write(key+RECSEP+repr(value)+"\n")
22 f.write(ENDREC+"\n")
23 f.write(ENDDB)
24
25 def loadDbase(dbfilename):
26 db={} #保存字典
27 rec = {} #存储每个人都的信息
28 with open(dbfilename,mode="r",encoding="utf-8") as f:
29 for key in f:
30 key=key.strip()
31 if key ==ENDDB:
32 return db
33 elif key==ENDREC:
34 rec={}
35 continue
36 elif RECSEP in key:
37 k,value=key.split(RECSEP)
38 rec[k]=value
39 else:
40 db[key]=rec
41
42
43
44
45
46 if __name__=="__main__":
47 from initdata import db
48 storDbase(db)
49 print(loadDbase(dbfilename))
3)载入数据 创建dump_db_file.py文件
1 from make_db_file import loadDbase
2
3 db=loadDbase() # 通过loadDbase()方法将文件中的内容加载到字典
4 for key in db:
5 print(key,"==>",db[key])
6 print(db["yw"]["name"])
4)更新数据 创建update_db_file.py
先从文件中加载数据,然后对字典进行修改,最后再写入到文件当中,完成文件数据的更新
1 from make_db_file import loadDbase,storDbase
2 db=loadDbase() #加载数据
3 db["yw"]["age"]=100 #修改数据
4 db["xxho"]["pay"]=10000
5 print(db)
6 storDbase(db) #再次保存数据