好久没写博客了,刚好这些天有个python作业要求完成一个小小的通讯录(使用json)。
我加入了三个信息 name, number, like_music(滑稽),主要涉及到对json文件的操作,顺便对我去年学习语言时的一个小总结。话不多说,上代码~~~~~
import json
import os
import random
path = r"xxx.json" # enter your path
if not os.path.exists(path):
print(1)
with open(path, 'w') as fp:
pass
def show(dic):
fmt = "{:5}\t|{:^11} |\t{:^10}"
print("-" * 8 + "+" + "-" * 12 + "+" + "-" * 22)
print(fmt.format("Name", "Number", "Like_Music"))
for i in dic:
print("-" * 8 + "+" + "-" * 12 + "+" + "-" * 22)
print(fmt.format(dic[i]['name'], dic[i]['number'], dic[i]['like_music']))
print("-" * 8 + "+" + "-" * 12 + "+" + "-" * 22)
input("enter continue\n")
return True
def find(dic, name):
fmt = "{:5}\t|{:^11} |\t{:^10}"
all_person_no = []
for i in dic:
if dic[i]['name'] == name:
print("-" * 8 + "+" + "-" * 12 + "+" + "-" * 22)
print(fmt.format(dic[i]['name'], dic[i]['number'], dic[i]['like_music']))
print("-" * 8 + "+" + "-" * 12 + "+" + "-" * 22)
all_person_no.append(i)
if len(all_person_no) == 0:
return False, None
else:
return True, all_person_no
def insert(data):
name = input("Enter the name\n")
flag, person_no = find(data, name)
if flag:
if input("Already exists, whether to change(enter y change||enter n new one)\n") == "y":
if len(person_no) > 1:
if input("same name person numbers >= 2, whether to change them all(enter y)\n") == "y":
number = input("Enter the number\n")
like_music = input("Enter the like_music\n")
for new_person_no in person_no:
new_json = {new_person_no: {"name": name, "number": number, "like_music": like_music}}
data.update(new_json)
with open(path, 'w', encoding='utf-8') as fw:
json.dump(data, fw, indent=4, ensure_ascii=False)
return True
else:
number = input("Enter the number\n")
like_music = input("Enter the like_music\n")
while 1:
change_no = int(input("enter this person number who you want to change(first is 1, second is 2...)\n"))
try:
new_person_no = person_no[change_no - 1]
new_json = {new_person_no: {"name": name, "number": number, "like_music": like_music}}
data.update(new_json)
with open(path, 'w', encoding='utf-8') as fw:
json.dump(data, fw, indent=4, ensure_ascii=False)
return True
except:
print("please enter right number")
else:
number = input("Enter the number\n")
like_music = input("Enter the like_music\n")
new_person_no = person_no[0]
new_json = {new_person_no: {"name": name, "number": number, "like_music": like_music}}
data.update(new_json)
with open(path, 'w', encoding='utf-8') as fw:
json.dump(data, fw, indent=4, ensure_ascii=False)
return True
number = input("Enter the number\n")
like_music = input("Enter the like_music\n")
random_number = random.randint(0, 100)
new_person_no = "person" + str(random_number)
new_json = {new_person_no: {"name": name, "number": number, "like_music": like_music}}
data.update(new_json)
with open(path, 'w', encoding='utf-8') as fw:
json.dump(data, fw, indent=4, ensure_ascii=False)
return True
def delete(data, name):
flag, person_no = find(data, name)
if flag:
if input("sure to delete?(enter y)\n") == "y":
for i in range(len(person_no)):
data.pop(person_no[i])
with open(path, 'w', encoding='utf-8') as fw:
json.dump(data, fw, indent=4, ensure_ascii=False)
print("delete succeeded")
else:
print("no person named{}, delete error!".format(name))
while True:
try:
with open(path, 'r', encoding='utf-8') as fp:
data = json.load(fp)
except:
data = {}
print("|---------------|" + "\n"
"|0:exit |" + "\n"
"|1:show |" + "\n"
"|2:find |" + "\n"
"|3:insert |" + "\n"
"|4:delete |" + "\n"
"|--------------|")
select_number = input("Select the number you entered\n")
print()
if select_number == '0':
print("Welcome to use next time")
break
elif select_number == '1':
result = show(data)
if result:
print("")
else:
print("show error")
elif select_number == '2':
name = input("Enter the name of the finder")
result, i = find(data, name=name)
if result:
print("Search succeeded")
else:
print("no person")
input("enter continue\n")
elif select_number == '3':
result_dic = insert(data)
input("enter continue\n")
elif select_number == '4':
name = input("Enter the name to delete\n")
delete(data, name)
input("enter continue\n")
else:
print("input right selection number")
欢迎留言联系邮箱2021132070@stu.cuit.edu.cn交流问题或者私信我~~~~(这段时间比较佛系要赶学习了)