☆with、open
一、open()------close()
open(‘py同目录下的文件名(带后缀)’,‘操作方式’)
用来访问磁盘中存放的文件,可以进行读写等操作
data=open(‘1.txt’,‘a’)
将打开的资源命名为data,之后语句中直接用变量data对资源数据进行调用或写入
data.close()
将处理完的数据data存回磁盘中存放的文件,并将文件句柄关闭
1、操作方式
w:以写方式打开
如果写入的变量中原有数据则会被清空
a:以追加方式打开
如果写入的变量中原有数据则会保留并加上新写入的数据组成新的列表
r:以读方式打开
r+:以读写模式打开
w+:以读写模式打开
rb:以二进制读模式打开
wb:以二进制写模式打开
ab:以二进制追加模式打开
rb+:以二进制读写模式打开
wb+:以二进制读写模式打开
ab+:以二进制追加模式打开
2、文本读取方式
a.read()
一次性读完整个文本资源的内容并以一整个字符串的形式存入变量
a.readline()
每次只读取一行文本内容并字符串类型追加存入变量,一般配合循环语句
a.readlines()
#一次性读完每一行的文本内容并以列表的方式存入变量
二、with with open() as data:
使用于对资源进行访问的场合,保证不管处理过程中是否发生错误或者异常都会执行规定的__exit__(“清理”)操作,释放被访问的资源,比如有文件读写后自动关闭、线程中锁的自动获取和释放等.
三、名片管理系统再次优化
修改部分发现的bug
加入用txt文档作为数据库的功能
def jiemian():# 显示出所有的选择
print('****************名片管理系统*********************')
print('1.添加名片')
print('2.删除名片')
print('3.修改名片')
print('4.查询名片')
print('5.退出系统')
print('*************************************************')
def chaxun(self):#查询名片函数
intel=input('请输入需要查询的名片的联系方式:')
for obj in self: #表示遍历列表,拿出每一条的名片数据
if obj['tel'] == intel: #寻找所查询联系方式的名片
print(obj)#输出所查名片
return
print('未找到该名片')
def xiugai(info_list):#修改名片函数
intel=input('请输入需要修改的名片的联系方式:')
for obj in info_list: #表示遍历列表,拿出每一条的名片数据
if obj['tel'] == intel: #找到所查联系方式对应的名片
print(obj)
queren=input('是否修改该名片(y/任意键):')
#确认是否要修改
if queren == 'y':
info_list.remove(obj)#删掉列表中改名片
a=7
n=['1','2','3','4','q']
while a not in n:#判断用户输入的操作数是否符合规范
a=input('\n1、名字\n2、联系方式\n3、公司名称\n4、公司职位\n\n您需要修改哪项(输入q返回最上级):')
if a == '1':#修改名片中的名字
obj['name']=input('请输入修改后的名字:')
info_list.append(obj)
print('修改成功')
return
elif a == '2':#修改名片中的联系方式
obj['tel']=input('请输入修改后的联系方式:')
info_list.append(obj)
print('修改成功')
return
elif a == '3':#修改名片中的公司名称
obj['company']=input('请输入修改后的公司名称:')
info_list.append(obj)
print('修改成功')
return
elif a == '4':#修改名片中的公司职位
obj['duty']=input('请输入修改后的公司职位:')
info_list.append(obj)
print('修改成功')
return
elif a == 'q':#返回修改
info_list.append(obj)
print('放弃修改')
return
else:
print('请输入有效数字')
else:#将删除的元素补回列表
info_list.append(obj)
print('放弃修改')
return
print('未找到该名片')
def shanchu(info_list):#删除名片函数
intel=input('请输入需要删除的名片的联系方式:')#输入要找的名片联系方式
for obj in info_list: #表示遍历列表,拿出每一条的名片数据
if obj['tel'] == intel: #按照输入联系方式找到要删除的名片
print(obj)#确认是否删除
queren=input('是否删除该名片(y/任意键):')
if queren == 'y':
info_list.remove(obj)#删除对应名片
print('已删除该名片')
return
else:
print('放弃删除')#放弃删除操作
return
print('未找到该名片')
def tianjia(info_list):#添加名片函数
# todo 与用户交互,让用户输入具体的信息
inname = input('请输入需要存储的名字:')
intel = input('请输入联系方式:')
incompany = input('请输入公司名称:')
induty = input('请输入公司职位:')
# TODO 判断用户是否已经存在
for obj in info_list: #表示遍历列表,拿出每一条的名片数据
if obj['tel'] == intel: #判断字典中是否存在用户输入的号码,即真正判断是否有重复数据
print('已经存在')
return
'''这是没有重复数据进入的操作'''
# TODO 增加一个新字典,用来存储一个新名片
person_dict = {}
person_dict['name'] = inname
person_dict['tel'] = intel
person_dict['company'] = incompany
person_dict['duty'] = induty
# todo 将每一个新增的字典插入到原始的列表中去
info_list.append(person_dict)
print('添加名片成功')
def xieru(info_list):#写入txt的函数
with open('1.txt','w') as f:#将txt中的数据放入变量f
for i in range(len(info_list)):#通过变量f将列表中每一个元素以换行符为分隔符写入txt文档
f.write(str(info_list[i])+'\n')
def duqu(info_list):#读取txt的函数
with open('1.txt','r') as f:#将txt文档中的数据放入变量f
chang=f.readlines()#将txt中的数据通过变量f转换成列表存入变量chang
for i in range(len(chang)):#将列表中的每一个元素转换为字典类型并存入info_list列表
info_list.append(eval(chang[i].strip('\n')))
info_list = []
try:#将txt文件中的数据写入列表
duqu(info_list)
except:#当目录下没有txt文件时创建一个空文件
xieru(info_list)
# 所有的名片存放在这个列表里面
while True:
jiemian()
#与用户交互,让他输入选择
choice = input('请输入您的选择') #input输入的内容是字符串的类型
#根据用户的输入,指定不同的操作
if choice == '1':
# 实现增加名片的功能
tianjia(info_list)#添加名片
xieru(info_list)
elif choice == '2':
shanchu(info_list)#删除名片
xieru(info_list)
elif choice == '3':
xiugai(info_list)#修改名片
xieru(info_list)
elif choice == '4':
chaxun(info_list)#查询名片
elif choice == '5':
quit = input('确认退出请按q:')
if quit == 'q':
break
else:
print('请输入正确的指令')