高溪成 2022-01-18 22:34 采纳率: 66.7%
浏览 67
已结题

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

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

  • 写回答

1条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 已结题 (查看结题原因) 1月19日
      • 已采纳回答 1月19日
      • 创建了问题 1月18日

      悬赏问题

      • ¥15 如何修改为正确的?求解决
      • ¥15 django访问管理员界面问题
      • ¥20 python homework完成
      • ¥20 求解 多变量系统的最小二乘辨识问题的推导以及matlab仿真
      • ¥15 arduino esp8266 Blinker编译报问题
      • ¥15 ubuntu18.04运行模型,直接死机
      • ¥30 (问卷调查)莫名其妙丢了u盘,你们会是什么心理状态
      • ¥100 Spark+android应⽤案例
      • ¥15 yolov8 目标检测 重叠 遮挡
      • ¥20 微信聊天记录如何部署到服务器上