Python中csv文件的操作

问题遇到的现象和发生背景

单独编辑csv文件后运行不成功

问题相关代码,请勿粘贴截图
import sys,os
#定义操作列表
ops = ['查询员工工资','修改员工工资','增加新员工记录','删除员工信息','查看全部员工信息','汇总统计','退出']
info = {}
def get_info():
   #读取文件得到员工信息
    global info
    with open('info.csv',mode='r',encoding='utf-8') as f_r:
        for line in f_r:
            line = line.rstrip('\n')
            if line:
                name = line.split(' ')[0]
                slary = line.split(' ')[1]
                info[name] ={
                            'name':'%s'%name,
                            'slary':'%s'%slary,
                            'other':''
                        }
#定义写操作函数
def write(name,slary):
    with open('info.csv', mode='a+', encoding='utf-8') as f_w:
        f_w.write('\n%s %s'%(name,slary))

#定义修改员工信息函数
def replace(old_name,new_name,old_slary,new_slary):
    f_r = open('info.csv',mode='r',encoding='utf-8')
    for line in f_r:
        line = line.strip()
        if old_name in line:
            line = line.replace(old_name,new_name)
            line = line.replace(old_slary,new_slary)
        f_w.write(line + '\n')
    f_r.close()
    f_w.close()

while True:
    get_info()
    ##打印操作菜单
    for key,ops_lists in enumerate(ops):
        print(key,ops_lists,)
    select = input("请选择操作序号:")
    if select.isdigit():
        pass
    else:
        print("请输入数字")
        continue

    if select.startswith('0'):
        input1 = input("请输入员工名字:")
        print("%s的工资是:%s" %(input1,info[input1]['slary']))
        continue

    elif select.startswith('1'):
        input1 = input("请输入修改员工的名字:")
        print("%s现在的信息是:名字:%s,工资:%s"%(input1,info[input1]['name'],info[input1]['slary']))
        input2 = input("名字修改为:")
        input3 = input("工资修改为:")
        replace(input1, input2,info[input1]['slary'], input3)
        os.remove('info.csv')
        # os.rename('info1.csv','info.csv')
        print("员工信息修改成功")
        get_info()
        continue

    elif select.startswith('2'):
        input1 = input("请输入增加员工的名字:")
        input2 = input("请输入增加员工的工资:")
        write(input1,input2)
        print("新增员工信息成功")
        get_info()
        continue
    elif select.startswith('3'):
        input1 = input("请输入删除员工的名字:")
        with open("info.csv","r",encoding="utf-8")as f:
            lines=f.readlines()
            print(lines)
            with open("info.csv", "w", encoding="utf-8")as f_w:
                for line in lines:
                    if"input"in line:
                        get_info()
        continue
    elif select.startswith('4'):
        import pandas as pd

        data = pd.read_csv('info.csv')
        print(
            data)
        get_info()
        continue
    elif select.startswith('6'):
        print("退出成功")
        sys.exit(1)

运行结果及报错内容

更改csv内容后显示超出范围什么的

我的解答思路和尝试过的方法

把csv文件清空内容后重新加就可以了

我想要达到的结果

因为用代码添加的没有表头,也不是一个格子一个数据,所以想问问大家,这个需要怎么实现 或者怎么才能直接更换csv文件不报错 csv文件名:info.csv

这个是我百度到的代码,加了加东西,但是就是实现不了要的效果,另外,想删除一行的时候却是把整个内容都删除了,有人可以解答一下吗

你单独编辑csv文件后格式与程序规定的格式不一样,当然运行不成功了
你希望你csv文件格式是什么样子的?

你题目的解答代码如下:

import csv

import sys,os
#定义操作列表
ops = ['查询员工工资','修改员工工资','增加新员工记录','删除员工信息','查看全部员工信息','汇总统计','退出']
info = {}
def get_info():
   #读取文件得到员工信息
    global info
    try:
        with open("info.csv","r",newline="", encoding='utf-8') as fileObj:
            li = list(csv.reader(fileObj))
        for name, slary in li[1:]:
            info[name] ={
                'name':name,
                'slary':slary,
                'other':''
            }
    except IOError:
        info = {}

#定义写操作函数
def write_info():
    with open("info.csv","w",newline="", encoding='utf-8') as fileObj:
        csv.writer(fileObj).writerow(["名字","工资"])
        for k,v in info.items():
            csv.writer(fileObj).writerow([v["name"],v["slary"]])



get_info()
while True:
    ##打印操作菜单
    for key,ops_lists in enumerate(ops):
        print(key,ops_lists,)
    select = input("请选择操作序号:")
    if select.isdigit():
        pass
    else:
        print("请输入数字")
        continue

    if select.startswith('0'):
        input1 = input("请输入员工名字:")
        if input1 not in info:
            print(input1,"不存在")
            continue
        print("%s的工资是:%s" %(input1,info[input1]['slary']))
        continue

    elif select.startswith('1'):
        input1 = input("请输入修改员工的名字:")
        if input1 not in info:
            print(input1,"不存在")
            continue
        print("%s现在的信息是:名字:%s,工资:%s"%(input1,info[input1]['name'],info[input1]['slary']))
        input2 = input("名字修改为:")
        input3 = input("工资修改为:")
        del info[input1]
        info[input2] ={
            'name':input2,
            'slary':input3,
            'other':''
        }
        print("员工信息修改成功")
        continue

    elif select.startswith('2'):
        input1 = input("请输入增加员工的名字:")
        input2 = input("请输入增加员工的工资:")
        info[input1] ={
            'name':input1,
            'slary':input2,
            'other':''
        }
        print("新增员工信息成功")
        continue
    elif select.startswith('3'):
        input1 = input("请输入删除员工的名字:")
        if input1 not in info:
            print(input1,"不存在")
            continue
        del info[input1]
        continue
    elif select.startswith('4'):
        print(f'名字           工资')
        for k,v in info.items():
            print('{:15}{}'.format(v["name"],v["slary"]))
        continue
    elif select.startswith('5'):
        print('人数:',len(info))
        print('共发工资:',sum([int(x['slary']) for x in info.values()]))
        continue
    elif select.startswith('6'):
        write_info()
        print("退出成功")
        sys.exit(1)

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img