python练习:4.2.3 文件操作的应用
出处:毫无障碍学Python
1
2
3
4
5
6
我的解答:
import os
import ast
long_text ='''
账号、密码管理系统
---------------------
1.输入账号、密码(循环写入)
2.显示账号、密码(读取)
3.修 改 密 码(读取,写入)
4.删除账号、密码(写入)
0.结 束 程 序
---------------------
'''
long_text_2 ='''
账号 密码
================
'''
long_text_3='''
请输入要修改的账号(Enter==>停止输入)
'''
# 创建1个空字典
users_dirt = {}
# 获取当前脚本的绝对目录的路径
script_path = os.path.dirname(__file__)
# 存档数据的文件名
filename = script_path + '/mySaveFile.json'
# print(filename) #调试用,注释掉
user_num = None
Esc = 'Esc'
# 输入账号、密码,返回1个元组
def input_account_passwd():
account = input('请输入账号(Enter==>停止输入):')
passwd = input('请输入密码:')
#修改全局作用域下的字典
users_dirt[account] = passwd
return (account,passwd)
# 追加写入文件,保存字典格式的文本
def write_into_file(content,filename):
with open(filename,mode='w',encoding='UTF-8-sig') as fh:
fh.write(str(content))
print('已写入文件'+ filename +"。")
# 读取文件并将字符串转换成字典
def show_account_passwd():
fh = open(filename,mode='r',encoding='UTF-8-sig')
str_dict = fh.read()
fh.close()
global users_dirt #声明为全局变量
users_dirt =ast.literal_eval(str_dict)
print(long_text_2)
for key,value in users_dirt.items():
print(' ',key,value,sep=' ')
# 更新文件中指定的账号的密码
def edit_account_passwd():
edit_account = input("请输入要修改的账号(Enter==>停止输入)")
fh = open(filename,mode='r+',encoding='UTF-8-sig')
str_dict = fh.read()
fh.close()
#先讀取
global users_dirt #声明为全局变量
users_dirt =ast.literal_eval(str_dict)
print("原密码为:" + users_dirt[edit_account])
print(' ') #空行
new_passwd = input("请输入新密码:")
#TO DO 判断新密码的复杂度的规则
users_dirt[edit_account] = new_passwd
#再寫入
fh = open(filename, mode='w', encoding='UTF-8-sig')
fh.write(str(users_dirt)) #把字典轉成字符串再寫入
fh.close()
def delete_account_passwd():
fh = open(filename,mode='w',encoding='UTF-8-sig')
fh.write('这里存放manage.py输出字典格式的文本。')
fh.close()
#初始化將輸入數字存放到全局變量
def init_start():
user_select = input('请输入您的选择:')
#TO DO提示报错,如果输入非选项数字則報錯
global user_num
user_num = int(user_select)
return user_num
def choice_num(num):
global user_num
num = user_num
if num == 1:
Flag = True
while Flag:
information = input_account_passwd() # information是最后输入的一对儿(k,v)
if information[0] == Esc.lower() or information[1] == Esc.lower():
break
write_into_file(content=users_dirt,filename=filename) # 写入的是字典完整的内容
print(f'{information[0]}已保存完毕') # 字符串的格式化输出
print('用户名或密码:输入esc退出循环。')
elif num == 2:
show_account_passwd() #读取文件内容并打印
elif num == 3:
edit_account_passwd() #每次更新一个键值对
elif num == 4:
delete_account_passwd() #每次删除一个键值对
elif num == 0:
print('程序执行完毕!')
else:
print('请输入数字[1,2,3,4,0]选择程序的功能!')
if __name__ == '__main__':
# 程序运行的起始位置
print(long_text)
# 初始化將輸入數字存放到全局變量
num = init_start()
# 通過數字調用不同的方法
choice_num(num)
end