Python3练习:对员工信息文件,实现增删改查操作
1.练习要求:

2.数据文件(data_staff.txt)
1,Alex Li,22,13651054684,运维,2013-02-04
2,Jack Wang,20,13312331232,HR,2014-06-03
3,Mike Cao,20,15504231232,Sales,2013-05-06
4,Jack Chen,34,12404231232,HR,2011-02-01
5,Lu Haojie,21,15204231232,运维,2013-08-12
3.实现代码
A.主程序部分:采用字典类型来实现函数的调用(key对应的value是函数名,通过Name()语法可以调用函数执行),利用os模块的remove()和rename()实现文件的修改后的旧文件删除和新文件的重命名。
import os
msg_dict={
'':Search,
'':Add,
'':Delete,
'':Change,
'':'退出'
} while True:
print( """
1:查询
2:添加
3:删除
4:修改
5:退出
""")
choice=input('输入序号:')
if choice not in msg_dict:
print("输入错误,请重新输入")
continue
if int(choice)==5:
exit()
else:
msg_dict[choice]()
B.查询函数:主要通过字符串常用操作的split()实现从字符串到列表的转换,join()实现列表到字符串的转换
def Search():
# 查询方式一:select * from staff_table where age >= 22
# 查询方式二:select * from staff_table where dept = "IT"
# 查询方式三:select * from staff_table where enroll_date like "2013" data=input('输入您的查询信息:')
data=data.split(' ')
con=data[7]
asp=data[5]
count=0
with open('data_staff','r',encoding='utf-8') as f:
if asp=='age':
for line in f:
if int(line.split(',')[2])>=int(con):
print(line)
count+=1
elif asp=='dept':
for line in f:
if line.split(',')[4] in con:
print(line)
count += 1
else:
for line in f:
if line.split(',')[5].split('-')[0] in con:
print(line)
count += 1
print('查询结束,共查到符合条件的信息 %d 条 ' % count)
C.添加函数:利用‘r+’的可读写模式来实现读写(注意这种方式下的write()是追加到文件末尾的)
def Add():
# 添加语法: name,age,phone,dept,enroll-date
data=input('输入您要添加的员工信息:')
list_data=data.strip().split(',')
list_all=[]
f=open('data_staff','r+')
for line in f:
list_all.append(line.strip().split(',')[3])
if list_data[2] in list_all:
print("该用户已经存在")
f.close()
else:
for line in f:
f.write(line)
staff_id=str(len(list_all)+1)
list_data.insert(0,str(staff_id))
f.write('\n')
f.write(','.join(list_data))
f.close()
print('添加成功')
D.删除函数:
def Remove():
# 删除语法:delete from staff_table where staff_id = 12
staff_id=input("输入您要删除员工的Staff_id:")
staff_id=staff_id.strip().split(' ')[6]
f=open('data_staff','r')
f1=open('new_data_staff','w')
for line in f:
in_list=line.split(',')
if in_list[0]<staff_id:
f1.write(line)
elif in_list[0]>staff_id:
in_list[0]=str(int(in_list[0])-1)
f1.write(','.join(in_list))
else:
continue
f.close()
f1.close()
os.remove('data_staff')
os.rename('new_data_staff','data_staff')
print('删除成功')
E.修改函数:
def Change():
# 修改请输入(注意空格和没有引号):UPDATE staff_table SET dept = IT where dept = 运维
data=input("请输入您要修改的信息:")
old=data.split(' ')[5]
new=data.split(' ')[9]
f=open('data_staff','r',encoding='utf-8')
f1=open('new_data_staff','w',encoding="utf-8")
for line in f:
if old in line:
line=line.replace(old,new)
f1.write(line)
f.close()
f1.close()
os.remove('data_staff')
os.rename('new_data_staff','data_staff')
print('修改成功')
Python3练习:对员工信息文件,实现增删改查操作的更多相关文章
- C#+Access 员工信息管理--简单的增删改查操作和.ini配置文件的读写操作。
1.本程序的使用的语言是C#,数据库是Access2003.主要是对员工信息进行简单的增删改查操作和对.ini配置文件的读写操作. 2.代码运行效果如下: 功能比较简单.其中在得到查询结果后,在查询结 ...
- Java使用DOM4J对XML文件进行增删改查操作
Java进行XML文件操作,代码如下: package com.founder.mrp.util; import java.io.File; import java.util.ArrayList; i ...
- python文件实现增删改查操作
# coding = utf-8 import os import json import re ''' 本程序旨在将练习基础知识部分,包括: 列表,元组,字典,文件,函数,字符串等知识 实现的功能: ...
- MyBatis学习(二)、SQL语句映射文件(2)增删改查、参数、缓存
二.SQL语句映射文件(2)增删改查.参数.缓存 2.2 select 一个select 元素非常简单.例如: <!-- 查询学生,根据id --> <select id=" ...
- MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...
- 【练习】Python第四次:实现对文件的增删改查
一,实现对文件的增删改查 (一),三级菜单的处理结构及退出技巧:使用TAG标记 tag=True while tag: print('leve1') choice=input("level1 ...
- 基于SpringMVC的文件(增删改查)上传、下载、更新、删除
一.项目背景 摘要:最近一直在忙着项目的事,3个项目过去了,发现有一个共同的业务,那就是附件的处理,附件包括各种文档,当然还有图片等特殊文件,由于时间的关系,每次都是匆匆忙忙的搞定上线,称这项目的空档 ...
- 用dom4j解析xml文件并执行增删改查操作
转自:https://www.aliyun.com/jiaocheng/1339446.html xml文件: <?xml version="1.0" encoding=&q ...
- java对xml文件做增删改查------摘录
java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...
- python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删改查操作
1.通过 pip 安装 pymysql 进入 cmd 输入 pip install pymysql 回车等待安装完成: 安装完成后出现如图相关信息,表示安装成功. 2.测试连接 import ...
随机推荐
- linux 文件常用操作
linux 文件基本操作 新建文件:touch test 不会替换重名文件,并且linux一切都是文件,文件夹和文件不能重名 新建文件夹:mkdir test使用 -p 参数,同时创建父目录(如果不存 ...
- 路由协议RIP、EIGRP、OSPF
前提 在网络拓扑中,我们经常多个路由连接不同子网,路由之间要转发不同子网的包,前提是路由之间要知道对方路由的存在. 因此这次我要写的是有关维护路由之间存在的协议,RIP.EIGRP和OSPF,静态路由 ...
- QT的定时器使用
http://blog.csdn.net/steven6977/article/details/9310997
- Grunt 使用(一)基础搭建
jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用!废话不多说,直接上干货. 1.安装node.js并检查node -v 和 n ...
- LINQPad 编译调试C#代码的工具推荐
LinqPad介绍 学习C#代码的好帮手,很容易调试C#代码片段. LINQPad 4 支持.NET Framework 4.0 / 4.5 ,专业调试LINQ,lambda等特性,完全取代Snipp ...
- SAP CRM settype的创建,背后发生了什么
来自我的同事Sara. 当我们在CRM系统里创建一个settype之后,其实系统后台悄悄的帮我们创建了很多ABAP对象,比如对应的database tables, other ABAP Diction ...
- std::string,std::vector,std::accumulate注意事项
在用string做字符串拼接时,会发现随着string的增大越来越慢,原因主要是string(和vector)是基于现行内存的数据结构,在海量数据时,经常会申请新的一块内存,把原有的数据拷贝过去然后再 ...
- PhoneGap Geolocation 获取地理位置 api
一. PhoneGap Geolocation 对象介绍 1.使应用程序可以访问地理位置信息.geolocation 对象提供了对设备 GPS 传感器的访问.Geolocation 提供设备的位置信息 ...
- bzoj2331 [SCOI2011]地板
Description lxhgww的小名叫“小L”,这是因为他总是很喜欢L型的东西.小L家的客厅是一个的矩形,现在他想用L型的地板来铺满整个客厅,客厅里有些位置有柱子,不能铺地板.现在小L想知道,用 ...
- CF839D Winter is here
题目分析 显然我们不可能直接计算每一个子序列的贡献,而应该计算对于每一个gcd对答案的贡献. 考虑容斥.按照套路: 设\(q(i)\)表示序列\(gcd\)为\(i\)的倍数的序列长度和. 设\(g( ...