python程序设计--CSV文件操作

本篇博客主要针对关于CSV文件操作会出现的问题以及程序逻辑等等。

本次代码程序如下:

1、学生通讯录        利用Python编写一个简易的学生信息管理系统,数据存放在文件内,功能包含添加学生信息、删除学生信息、查看学生信息等。为方便起见,功能选择采用菜单方式,根据选择的菜单号执行对应的功能,每个菜单所展示的功能都可以用函数进行实现。         学生信息保存在一个字典结构中,字典每一项存储了一个学生的信息,包括:学号、姓名、性别、班级、电话,如下表所示。从文件读入的信息可以结合字典进行学生信息的存储。      

学号

姓名

性别

班级

电话

101

张三

计算22

11610108888

102

李四

计算22

11600009999

103

盼盼

计算22

11600006666

101

张三

计算22

11610108888

代码程序如下:

import csv
list1=[
    {"学号":101,"姓名":"李华","性别":"男","班级":"大数据","电话":32454},
    {"学号":102,"姓名":"小红","性别":"女","班级":"大数据","电话":34345},
]
f=open('test10.csv','w',encoding='utf8',newline="")
writer = csv.DictWriter(f, fieldnames=["学号", "姓名", "性别", "班级", "电话"])
writer.writeheader()
for line in list1:
    writer.writerow(line)
f.close()
print("------学生信息管理--------\n"
      "1.显示学生信息\n"
      "2.添加学生信息\n"
      "3.删除学生信息\n"
      "4.保存学生信息\n"
      "5.退出\n")
while True:
    n=input("请选择你要进行的操作:")
    if n=="1":
        with open('test10.csv',encoding='utf8',newline='')as f:
            reader=csv.reader(f)
            for row in reader:
                print(row)

    elif n=="2":
        dict={}
        id = int(input("请输入学号"))
        name = input("请输入姓名")
        sex=input("请输入性别")
        Class = input("请输入班级")
        tel=int(input("请输入电话"))
        dict={"学号":id,"姓名":name,"性别":sex,"班级":Class,"电话":tel}
        list1.append(dict)
        f = open('test10.csv', 'w', encoding='utf8', newline="")
        writer = csv.DictWriter(f, fieldnames=["学号", "姓名", "性别", "班级", "电话"])
        writer.writeheader()
        for line in list1:
            writer.writerow(line)
        f.close()
    elif n=="3":
        q=int(input("请输入你要删除的学号"))
        length2=len(list1)
        for i in range(0,length2):
            if q==(list1[i])["学号"]:
                del list1[i:i+1]
                print("删除成功")
                f = open('test10.csv', 'w', encoding='utf8', newline="")
                writer = csv.DictWriter(f, fieldnames=["学号", "姓名", "性别", "班级", "电话"])
                writer.writeheader()
                for line in list1:
                    writer.writerow(line)
                f.close()
                break
        else:
            print("该学生不存在")
    elif n=="5":
        print("退出")
        break

关于整个代码的逻辑,我们首先用字典去存储各个学生的信息,然后将字典存储到一个列表里,当我们打开文件时,就可以选择去输出学生信息或者更改或删除学生信息都可以,然而在代码实现的过程中并不是一帆风顺的,小编我也遇到了很多问题。

首先是我们在第一次写代码的时候将信息写入到csv文件可能会输出一些乱码问题

举个例子:

import csv
list1=[["学号","姓名","班级","性别","电话"],
       ["101","李华","大数据","男","2124"],
       ["102","高添","大数据","女","2435"]]
with open('st10.csv','w',newline="")as csvfile:
       writer=csv.writer(csvfile,dialect="unix")
       writer.writerows(list1)

如果这个时候我们运行代码打开文件,在st10文件里将会出现一堆乱码

那我们该如何解决呢?

1.在st10文件右下角选择GBK

然后我们点击重新加载(英文模式下是reload)就可以解决乱码问题了

如果我们的程序这时候出错了,应该转到代码界面,点击右下角,换成utf-8格式

点击之后我们再点击重新加载,即可解决报错问题。

第二个问题就是有关文件打开后的报错问题

如果我们遇到了上述的问题,解决方式很简单。造成类似代码的问题主要是我们再资源管理器中打开了st10.csv并且没有彻底关上,我们只需要重新找到文件并且彻底关上即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值