摘要:本文主要向大家介绍了Python语言之转载自Eva_J的作业,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。
本文主要向大家介绍了Python语言之转载自Eva_J的作业,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。
1.默写:带参数的装饰器。需要标注代码的执行步骤。2.整理作业:函数的知识点以及装饰器相关作业。装饰器作业需要自己写一遍,并给作业加注释。3.周末大作业:实现员工信息表文件存储格式如下:id,name,age,phone,job1,Alex,22,13651054608,IT2,Egon,23,13304320533,Tearcher3,nezha,25,1333235322,IT
现在需要对这个员工信息文件进行增删改查。
不允许一次性将文件中的行都读入内存。基础必做:a.可以进行查询,支持三种语法:select 列名1,列名2,… where 列名条件支持:大于小于等于,还要支持模糊查找。示例:select name, age where age>22select * where job=ITselect * where phone like 133
进阶选做:b.可创建新员工记录,id要顺序增加c.可删除指定员工记录,直接输入员工id即可d.修改员工信息语法:set 列名=“新的值” where 条件#先用where查找对应人的信息,再使用set来修改列名对应的值为“新的值”
注意:要想操作员工信息表,必须先登录,登陆认证需要用装饰器完成其他需求尽量用函数实现
作业要求:1.今天的第2、3个作业一起打包交上来2.放在作业2文件夹中需要交整理的函数相关的思维导图整理的函数知识点的博客装饰器作业加注释3.大作业放在3文件夹中 文件夹中需要包括: 代码 流程图(请上交一张png图片。如果没有合适的画图软件,可以用processon画) readme文件(请上交一个txt文件,对作业进行一些简单说明,包括作业的整体思路,如何运行,实现了哪些功能,遇到了哪些问题等。)
import os
def fieldtoid(field): #字段转下标
if field.strip() == 'id': return 0
elif field.strip() == 'name' : return 1
elif field.strip() == 'age' : return 2
elif field.strip() == 'phone' : return 3
elif field.strip() == 'job' : return 4
else:
return -1
def select(li_order): #查询
if li_order[1][0].strip()=='*': #判断是否打印所有列
if li_order[2]!='': #有条件,判断条件打印
if li_order[2][1]=='>':
with open('员工信息','r',encoding='utf-8') as f:
for line in f:
li_line = line.split(',')
if li_line[li_order[2][0]]>li_order[2][2]:print(line)
elif li_order[2][1]=='<':
with open('员工信息','r',encoding='utf-8') as f:
for line in f:
li_line = line.split(',')
if li_line[li_order[2][0]]<li_order[2][2]:print(line)
elif li_order[2][1]=='=':
with open('员工信息','r',encoding='utf-8') as f:
for line in f:
li_line = line.split(',')
if li_line[li_order[2][0]]==li_order[2][2]:print(line)
elif li_order[2][1]=='link':
with open('员工信息','r',encoding='utf-8') as f:
for line in f:
li_line = line.split(',')
if li_order in li_line[li_order[2][0]]:print(line)
else: print('出错啦!!!')
else: #无条件时,打印全部
with open('员工信息','r',encoding='utf-8') as f:
for line in f:
print(line)
else: #按列打印
if li_order[2]!='': #有条件,判断条件打印
if li_order[2][1]=='>':
with open('员工信息','r',encoding='utf-8') as f:
for line in f:
li_line = line.strip().split(',')
if li_line[li_order[2][0]]>li_order[2][2]:
for i in li_order[1]:
print(li_line[int(i)],end=',')
print('\n')
elif li_order[2][1]=='<':
with open('员工信息','r',encoding='utf-8') as f:
for line in f:
li_line = line.strip().split(',')
if li_line[li_order[2][0]]<li_order[2][2]:
for i in li_order[1]:
print(li_line[int(i)],end=',')
print('\n')
elif li_order[2][1]=='=':
with open('员工信息','r',encoding='utf-8') as f:
for line in f:
li_line = line.strip().split(',')
if li_line[li_order[2][0]]==li_order[2][2]:
for i in li_order[1]:
print(li_line[int(i)],end=',')
print('\n')
elif li_order[2][1]=='link':
with open('员工信息','r',encoding='utf-8') as f:
for line in f:
li_line = line.strip().split(',')
if li_order[2][2] in li_line[li_order[2][0]]:
for i in li_order[1]:
print(li_line[int(i)],end=',')
print('\n')
else: print('出错啦!!!')
else: #无条件时,打印全部
with open('员工信息','r',encoding='utf-8') as f:
for line in f:
print(line)
def append(li_order): #添加
if li_order[2]!='':print('语法错误!!!')
else:
with open('员工信息','r+',encoding='utf-8')as f:
filesize = os.path.getsize('员工信息')
print(filesize)
off=512#设置偏移量
if filesize/off>1:
off=512*(filesize/off-1)
f.seek(off,0) #seek(off, 2)表示文件指针:从文件末尾(2)开始向前50个字符(-50)
lines=f.readlines() #读取文件指针范围内所有行
last_line=int(lines[-1].split(',')[0])+1 #取最后一行
line=[str(last_line),'无','无','无','无']
for i in range(0,len(li_order[1])):
li_order[1][i]=li_order[1][i].split('=') #将添加字段的值转为列表格式
if fieldtoid(li_order[1][i][0])==-1:
print('输入的列名有误')
return
line[fieldtoid(li_order[1][i][0])]=li_order[1][i][1].strip()#将列名转为下标
line=','.join(line)
f.write('\n')
f.write(line)
def delete(li_order):
print('删除')
def sett(li_order):
print('修改')
while 1:
order = input('>')
li_order=[]
li_order.append(order.strip()[0:order.find(' ')].strip())
if 'where' in order:
li_order.extend(order[order.find(' '):].split('where')) #li_order[1]为字段位,li_order[2]为条件判断位置
if '>' in li_order[2]: #当条件是>号时,条件位的处理
li_order[2]=[i.strip() for i in li_order[2].strip().split('>')]
li_order[2].insert(1,'>')
elif '='in li_order[2]: #当条件是'='号时,条件位的处理
li_order[2]=[i.strip() for i in li_order[2].strip().split('=')]
li_order[2].insert(1,'=')
elif '<'in li_order[2]: #当条件是<号时,条件位的处理
li_order[2]=[i.strip() for i in li_order[2].strip().split('<')]
li_order[2].insert(1,'<')
elif 'like'in li_order[2]: #当条件是like号时,条件位的处理
li_order[2]=[i.strip() for i in li_order[2].strip().split('like')]
li_order[2].insert(1,'like')
else:
print('输入的命令有误,请重新输入!')
continue
li_order[2][0]=fieldtoid(li_order[2][0]) #将条件的列名转换为下标
else:
li_order.append(order[order.find(' '):].strip())
li_order.append('')
li_order[1]=(li_order[1].split(',')) #字段位,列表格式
if 'select' in li_order[0]:
if fieldtoid(li_order[1][0])!=-1:
for i in li_order[1]:
li_order[1][li_order[1].index(i)]=str(fieldtoid(i))
else:
if li_order[1][0].strip()!='*':
print('条件有误')
continue
select(li_order)
elif 'append' in li_order[0]:
append(li_order)
elif 'delete' in li_order[0]:
delete(li_order)
elif 'set' in li_order[0]:
sett(li_order)
else:print('输入的命令有误,请重新输入!')
View Code
员工信息表文件为文本文件,内容如下:
id,name,age,phone,job1,Alex,22,13651054608,IT2,Egon,23,13304320533,Tearcher3,nezha,25,1333235322,IT4,无,无,13333333333,BOSS作业没有都做完,如果数据量很大,删除和修改好像很麻烦。数据量小可以写一个新文件然后改名回来即可。
本文由职坐标整理并发布,希望对同学们学习Python有所帮助,更多内容请关注职坐标编程语言Python频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号