上机十 文件的读取

文章介绍了两个Python程序,一个是根据身份证前6位查询居民常住户口所在县,另一个是创建通讯录程序,用于添加、查询和管理联系人信息。

上机十 文件的读取

第一题

编写程序,实现根据地址码对照表和身份证号码查询居民常住户口所在县的功能。
运行结果如下:
请输入身份证前6位:110109
门头沟区

#!/usr/bin/python3
# _*_ coding: utf-8 _*_
#
# Copyright (C) 2023 - 2023 Cry, Inc. All Rights Reserved 
#
# @Time    : 2023/11/30 18:49
# @Author  : Cry
# @File    : one.py
# @IDE     : PyCharm
# 编写程序,实现根据地址码对照表和身份证号码查询居民常住户口所在县的功能。
# 运行结果如下:
# 请输入身份证前6位:110109
# 门头沟区
import json
import os.path


class query_system():
    data={}
    def __init__(self):
        if (os.path.exists('address.json')):
            with open('address.json', 'r', encoding='utf-8') as f:
                self.data = json.loads(f.read())
        else:
            print("address.json文件不存在,开始创建....")
            self.chuli_data()
            # print(self.data)
    def digui(self,jsons):
        if(jsons!={}):
            for i in jsons.keys():
                k,v=i.split("&")
                self.data[v]=k

                # new_jsons = json.loads(jsons[i])
                self.digui(jsons[i])
    def chuli_data(self):
        # https://pan.baidu.com/s/1v0be8bL4BWGNuZtEKUR9bg?pwd=1234 获取地址码大全
        if not os.path.exists("json.json"):
            print("json.json文件不存在,请下载!https://pan.baidu.com/s/1v0be8bL4BWGNuZtEKUR9bg?pwd=1234")
            return
        with open("json.json","r",encoding='utf-8') as f:
            datas=f.read()
            jsons=json.loads(datas)
            # print(jsons)
            self.digui(jsons)
            # print(self.data)
            print("创建地址文件address.json成功!!!")
        with open('address.json','w',encoding='utf-8') as f:
            f.write(json.dumps(self.data,ensure_ascii=False))
    def get_num(self,num):
        return self.data[num]

if __name__=="__main__":
    q=query_system()
    num=input("请输入身份证前6为:")
    if len(num)==6 and str.isdigit(num):
        print(q.get_num(num))


第二题

编写通讯录程序,该程序可接收用户输入的姓名、电话、QQ号码、邮箱等信息,将这些信息保存到“通讯录.txt”文件中,实现新建联系人功能;可根据用户输入的联系人姓名查找联系人,展示联系人的姓名、电话、QQ号码、邮箱等信息,实现查询联系人功能。

#!/usr/bin/python3
# _*_ coding: utf-8 _*_
#
# Copyright (C) 2023 - 2023 Cry, Inc. All Rights Reserved 
#
# @Time    : 2023/11/30 18:50
# @Author  : Cry
# @File    : two.py
# @IDE     : PyCharm
# 编写通讯录程序,该程序可接收用户输入的姓名、电话、QQ号码、邮箱等信息,
# 将这些信息保存到“通讯录.txt”文件中,
# 实现新建联系人功能;
# 可根据用户输入的联系人姓名查找联系人,
# 展示联系人的姓名、电话、QQ号码、邮箱等信息,
# 实现查询联系人功能。
import json
import os.path


class tongXunLu:
    data={}
    # 便于随时增加功能
    funs={"1":'新建联系人','2':'查询联系人','3':'查看所有联系人','4':'保存','5':'修改联系人','6':'删除联系人','0':'退出系统',}
    # 初始化通讯录,判断是否文件是否有联系人,没有联系人就data为{}
    def load_data(self):
        # 用r会报错,用a+会追加,需要a+ 加上seek(0)
        with open("tongXunLu.json",'a+',encoding='utf-8') as f:
            f.seek(0)
            for i in f.readlines():
                print(i)
                if i!="":
                    line=json.loads(i.strip())
                    self.data[line['name']]=line
    def __init__(self):
        self.load_data()
    def save(self):
        with open("tongXunLu.json",'w+',encoding="utf-8") as f:
            for k,v in self.data.items():
                f.write(json.dumps(v,ensure_ascii=False)+'\n')

    def hello(self):
        print("*"*20)
        print("欢迎使用[通讯录]V1.0")
        for k,v in self.funs.items():
            print(f"{k}.{v}")
        print("*"*20)
        self.choice_fun()

    def choice_fun(self):
        fun = input("请选择操作功能:")
        while(True):
            if(fun=='1'):
                print("*"*6+self.funs[fun]+"*"*6)
                self.insert_person()
            elif fun=='2':
                print("*" * 6 + self.funs[fun] + "*" * 6)
                self.query_user()
            elif fun=='3':
                self.getAll()
            elif fun=='4':
                self.save()
            elif fun=='5':
                self.update_user()
            elif fun=='6':
                self.delete_user()
            else:
                print("选项出错,程序退出")
                break
            fun = input("请选择操作功能:")
    #修改需要重新把整个data写入文件
    def update_user(self):
        name = input("请输入你要修改的用户姓名:")
        while (name not in self.data.keys()):
            flag=input("姓名不存在,是否为你添加用户?(是为y,否为n):")
            if(flag=="y"):
                self.insert_person(name)
                return
            name = input("请再次输入你要修改的用户姓名:")
            if (name == 'exit'):
                break
        while(True):
            inputs=input("请输入要输入的项目和值,空格隔开(name phone qq email),(exit 退出):")
            if(inputs=="exit"):
                break
            data,value=inputs.split(" ")
            if data=="name":
                #如果修改了姓名,需要删除原来的
                temp_data=self.data[name]
                del self.data[name]
                self.data[value]=temp_data
                name=value
            self.data[name][data]=value
        self.save()
        print("修改完成")
    def delete_user(self):
        name=input("请输入姓名:")
        while(name not in self.data.keys()):
            print("姓名不存在,请重新输入,或输入exit退出:")
            name = input("请输入姓名:")
            if(name=='exit'):
                break
        del self.data[name]
        self.save()
        print("删除用户成功")
    def insert_person(self,name=None):
        if name==None:
            name=input("请输入姓名:")
        else:
            name=name
        while(name in self.data.keys()):
            print("姓名已存在,请重新输入,或输入exit退出:")
            name = input("请输入姓名:")
            if(name=='exit'):
                break
        phone=input("请输入电话:")
        qq=input("请输入QQ号码:")
        email=input("请输入邮箱:")
        self.data[name]={"name":name,
                         "phone":phone,
                         "qq":qq,
                         "email":email}
        print(f"成功添加{name}为联系人")
        with open("tongXunLu.json",'a+') as f:
            f.write(json.dumps(self.data[name],ensure_ascii=False)+"\n")
    def query_user(self):
        name=input("请输入姓名:")
        if name in self.data.keys():
            print(self.data[name])
    def getAll(self):
        if(self.data=={}):
            print("无联系人")
        for vs in self.data.keys():
            print(f"====={vs}======")
            for k,v in self.data[vs].items():
                print(f"{k}:{v}")

    def insertOne(self,name,json):
        self.data[name]=json

if __name__=='__main__':
    tongXunLu=tongXunLu()

    tongXunLu.hello()
对照身份证前6位,整理了6457条数据.形成了省市区3级地区表 如下案例. INSERT INTO `area` VALUES ('1', '0', '1', '11', '1100', '110000', '北京市'); INSERT INTO `area` VALUES ('2', '1', '2', '11', '1101', '110100', '市辖区'); INSERT INTO `area` VALUES ('3', '2', '3', '11', '1101', '110101', '东城区'); INSERT INTO `area` VALUES ('4', '2', '3', '11', '1101', '110102', '西城区'); INSERT INTO `area` VALUES ('5', '2', '3', '11', '1101', '110103', '崇文区'); INSERT INTO `area` VALUES ('6', '2', '3', '11', '1101', '110104', '宣武区'); INSERT INTO `area` VALUES ('7', '2', '3', '11', '1101', '110105', '朝阳区'); INSERT INTO `area` VALUES ('8', '2', '3', '11', '1101', '110106', '丰台区'); INSERT INTO `area` VALUES ('9', '2', '3', '11', '1101', '110107', '石景山区'); INSERT INTO `area` VALUES ('10', '2', '3', '11', '1101', '110108', '海淀区'); INSERT INTO `area` VALUES ('11', '2', '3', '11', '1101', '110109', '门头沟区'); INSERT INTO `area` VALUES ('12', '2', '3', '11', '1101', '110110', '燕山区'); INSERT INTO `area` VALUES ('13', '2', '3', '11', '1101', '110111', '房山区'); INSERT INTO `area` VALUES ('14', '2', '3', '11', '1101', '110112', '通州区'); INSERT INTO `area` VALUES ('15', '2', '3', '11', '1101', '110113', '顺义区'); INSERT INTO `area` VALUES ('16', '2', '3', '11', '1101', '110114', '昌平区'); INSERT INTO `area` VALUES ('17', '2', '3', '11', '1101', '110115', '大兴区'); INSERT INTO `area` VALUES ('18', '2', '3', '11', '1101', '110116', '怀柔区'); INSERT INTO `area` VALUES ('19', '2', '3', '11', '1101', '110117', '平谷区');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厨 神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值