python练习_module02-1-员工信息表

python 操作 员工信息表

  • 要求:
    • 可进行模糊查询,语法至少支持下面3种:

      select name,age from staff_table where age > 22
      select * from staff_table where dept = "IT"
      select * from staff_table where enroll_date like "2013"

      查到的信息,打印后,最后面还要显示查到的条数

    • 可创建新员工纪录,以phone做唯一键,staff_id需自增
    • 可删除指定员工信息纪录,输入员工id,即可删除
    • 可修改员工信息,语法如下:
        UPDATE staff_table SET dept="Market" WHERE where dept = "IT"
      注意:以上需求,要充分使用函数,请尽你的最大限度来减少重复代码
  • 达成要求:
    • 查询命令的各单词之间可以有任意数量的空格
    • 查询时不设定条件(where语句)也可以执行
    • 错误信息高亮显示
  • 代码:
#!  /usr/bin/env python3
#   Author:Jailly

import pickle,re

# 查找
def search(search_condition):
    res = []  # 储存查找结果

    # where条件存在
    if search_condition:
        # 三种条件格式
        m1 = re.search(r‘age\s+(>|<)\s+(0|([1-9]\d*))‘, search_condition)
        m2 = re.search(r‘‘‘
            (?P<category>(staff_id)|(name)|(age)|(phone)|(dept)|(enroll_date))
            \s+=\s+
            (?P<value>.*)
            ‘‘‘, search_condition, re.X)
        m3 = re.search(r‘‘‘
            (?P<category>(staff_id)|(name)|(age)|(phone)|(dept)|(enroll_date))
            \s+like\s+
            (?P<value>[1-9]\d*)
            ‘‘‘, search_condition, re.X)

        # age <|> \d 的情况
        if m1:
            # 筛选条目
            for i in staff_table:
                info_dict = dict(zip([‘staff_id‘, ‘name‘, ‘age‘, ‘phone‘, ‘dept‘, ‘enroll_date‘], i))
                if eval(m1.group().replace(‘age‘, str(i[2]))):
                    res.append(info_dict)

        # category = \w+ 的情况
        elif m2:
            # 筛选条目
            for i in staff_table:
                # 对应信息表中每个条目的字典
                info_dict = dict(zip([‘staff_id‘, ‘name‘, ‘age‘, ‘phone‘, ‘dept‘, ‘enroll_date‘], i))
                if str(info_dict[m2.group(‘category‘)]) == m2.group(‘value‘).strip():
                    res.append(info_dict)

        # category like \w+ 的情况
        elif m3:
            for i in staff_table:
                info_dict = dict(
                    zip([‘staff_id‘, ‘name‘, ‘age‘, ‘phone‘, ‘dept‘, ‘enroll_date‘], i))  # 对应每个条目的字典
                if info_dict[m3.group(‘category‘)].count(m3.group(‘value‘)) or                         str(info_dict[m3.group(‘category‘)]).count(str(m3.group(‘value‘))):
                    res.append(info_dict)

        # 条件格式不正确的情况
        else:
            print(‘\033[1;31mwhere语句格式错误!\033[0m‘)

    # 无where条件
    else:
         for i in staff_table:
            info_dict = dict(zip([‘staff_id‘, ‘name‘, ‘age‘, ‘phone‘, ‘dept‘, ‘enroll_date‘], i))
            res.append(info_dict)
    return res

# 显示查找结果
def show(res, search_categories):
    if res:
        for i in res:
            # 查询所有条目 *
            if search_categories.strip() == ‘*‘:
                print(‘,‘.join([str(i[‘staff_id‘]), i[‘name‘], str(i[‘age‘]), i[‘phone‘], i[‘dept‘], i[‘enroll_date‘]]))
            # 查询指定条目 name,age,...
            else:
                category_list = search_categories.split(‘,‘)
                for j in category_list:
                    print(i[j.strip()], end=‘,‘)
                print()

        print(‘\n共查找到%d条记录\n‘ % len(res))

# 保存文件
def save():
    with open(‘staff_table.pkl‘, ‘wb‘) as f:
        pickle.dump(staff_table, f)

if __name__ == ‘__main__‘:
    while 1:
        with open(‘staff_table.pkl‘, ‘rb‘) as f:
            staff_table = pickle.load(f)

        cmd = input(‘command -> ‘)

        # 查询指令
        search_cmd = re.search(r‘‘‘
            ^\s*select\s+
            (?P<categories>\*|
            (
            ((staff_id)|(name)|(age)|(phone)|(dept)|(enroll_date))
            (\s*,\s*((staff_id)|(name)|(age)|(phone)|(dept)|(enroll_date)))?
            (\s*,\s*((staff_id)|(name)|(age)|(phone)|(dept)|(enroll_date)))?
            (\s*,\s*((staff_id)|(name)|(age)|(phone)|(dept)|(enroll_date)))?
            (\s*,\s*((staff_id)|(name)|(age)|(phone)|(dept)|(enroll_date)))?)
            )
            \s+from\s+staff_table
            (\s+where\s+
            (?P<condition>.*))?$‘‘‘,cmd,re.X)

        # 添加指令
        insert_cmd = re.search(r‘‘‘
            ^\s*[\w ]+,  # 姓名
            [1-9]\d*,  # 年龄
            \d{11},  # 手机号码
            [\w ]+,  # 部门
            ((20)|(19))\d{2}-((10)|(11)|(12)|(0[1-9]))-(([0-2][1-9])|(3[01]))$  # 入职日期
            ‘‘‘,cmd,re.X)

        # 删除指令
        delete_cmd = re.search(r‘^\d+$‘,cmd)

        # 更改指令
        update_cmd = re.search(r‘‘‘
            ^update\s+staff_table\s+set\s+
            (?P<category_update>(name)|(age)|(phone)|(dept)|(enroll_date))\s+
            =\s+
            (‘|")(?P<new_value>.*)(‘|")
            (\s+where\s+
            (?P<condition>.*))?$
            ‘‘‘,cmd,re.X)

        # 查询
        if search_cmd:
            search_categories = search_cmd.group(‘categories‘)
            search_condition = search_cmd.group(‘condition‘)

            res = search(search_condition)
            show(res,search_categories)

        # 添加
        elif insert_cmd:
            insert_list = insert_cmd.group().split(‘,‘)

            repeat_flag = 0
            for i in staff_table:
                if insert_list[2] == i[3]:
                    print(‘\033[1;31m手机号码已存在!\033[0m‘)
                    repeat_flag = 1
                    break
            else:
                insert_list.insert(0,( staff_table[-1][0] + 1 ) )
                staff_table.append(insert_list)

                save()
                print(‘添加成功!‘)

        # 删除
        elif delete_cmd:
            for i in staff_table:
                if delete_cmd.group() == str(i[0]):
                    staff_table.remove(i)
                    save()
                    print(‘删除成功!‘)
                    break
            else:
                print(‘\033[1;31m该staff_id不存在\033[0m‘)

        # 修改
        elif update_cmd:
            search_condition = update_cmd.group(‘condition‘)

            res = search(search_condition)
            for i in range(len(staff_table)):
                for j in res:
                    if staff_table[i][0] == j[‘staff_id‘]:
                        category_update = update_cmd.group(‘category_update‘)
                        new_value = update_cmd.group(‘new_value‘).strip()
                        j[category_update] = int(new_value) if category_update == ‘age‘ else new_value

                        # 保证顺序,不能用list(j.values())
                        staff_table[i] = list([j[‘staff_id‘],j[‘name‘],j[‘age‘],j[‘phone‘],j[‘dept‘],j[‘enroll_date‘]])

            save()
            print(‘修改成功!‘)

        # 退出
        elif cmd == ‘q‘:
            break

        # 输入格式不正确的情况
        else:
            print(‘\033[1;31m输入格式错误\033[0m‘)
时间: 2025-01-17 04:25:56

python练习_module02-1-员工信息表的相关文章

python学习之路 员工信息表(使用文件存储信息)

这里我只实现了员工信息的查询功能,其它的增删改没有实现. 关于员工信息的画了一个简单的流程图 查询流程图 实现的思路: 1.我们得到要查询的语句先把这个语句做简单的处理得到我们想要的数据 condition = input(">>>:").lower().replace(' ', '') # 不区分大小写 "selectname,agewhereage>20" ret = condition.split('where') # ['select

员工信息表作业

# 只实现作业要求的查询功能 # 增加,删除,修改功能为选做题 # 创建员工信息表 # 用户输入查询命令 # 分析用户输入的命令,从命令中提取需要查询的关键字 # 根据关键字来查询内容并输出 staff_table=r'F:\python文件\day21生成器\员工信息表.txt' def select(cmd1): #查询功能 with open(staff_table) as f: path=f.readlines() #读出多行赋值给path staff_l=[{ 'staff_id':

Python 基础 - Day 4 Assignment - 员工信息表程序

作业要求及初步思路 员工信息表程序,实现增删改查操作: ① 可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22 select * from staff_table where dept = "IT" select * from staff_table where enroll_date like "2013"② 解决方案: sql语句的python解析问题,即将用户输入的sql

Python下用List对员工信息表进行模糊匹配

#需求 用户可以模糊查询员工信息 显示匹配了多少条,匹配字符需要高亮度显示 #脚本内容 #!/usr/bin/env python #_*_ coding:utf-8 _*_ while True:         info = 'info.txt'         f = file(info)         search=raw_input('Please Engter You Search Info: ')         for line in f.readlines():       

python&#39;s sixth day for me 员工信息表

import os user_dic = { 'username':None, 'password':None, 'login':True } flag = False name_list = ['id','name','age','phone','job'] check_conditions = ['>','<','=','like'] def auth(func): def wrapper(*args,**kwargs): with open('user-pwd',encoding='ut

Python开发【第xxx篇】函数练习题-----员工信息表

文件存储格式如下: id,name,age,phone,job 1,Alex,22,13651054608,IT 2,Egon,23,13304320533,Tearcher 3,nezha,25,1333235322,IT 现在需要对这个员工信息文件进行增删改查. 基础必做: a.可以进行查询,支持三种语法: select 列名1,列名2,- where 列名条件 支持:大于小于等于,还要支持模糊查找. 示例: select name,age where age>22   #> < s

L01-04:python查询员工信息表练习

#decoding=utf-8 '''编写可供用户查询的员工信息表! 1|用户认证    ID Name department phone    查询关键字:姓名''' import linecache input01=raw_input("pls write your name:") i=1 name=[] count = len(open('user.txt','rU').readlines()) while i<=count:         fline = linecac

python Day 4 :员工信息表程序

员工信息表程序,实现增删改查操作: 可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22 select  * from staff_table where dept = "IT" select  * from staff_table where enroll_date like "2013" 查到的信息,打印后,最后面还要显示查到的条数 可创建新员工纪录,以phone做唯一键,s

python基础之员工信息表作业

周末大礼包 文件存储格式如下: id, name, age, phone, job 1, Alex, 22, 13651054608, IT 2, Egon, 23, 13304320533, Tearcher 3, nezha, 25, 1333235322, IT 现在需要对这个员工信息文件进行增删改查 一. 基础必做: 可以进行查询,支持三种语法: select 列名1,列名2,… where 列名条件 支持:大于小于等于,还要支持模糊查找. 示例: select name, age wh

打印简单公司员工信息表

要求,输入name不为空,输入次数最多3次,3次后跳出程序: 知识点: raw_input str转int whil if elif else continue break for 导入模块 引用变量值 格式化输出 vim #!/usr/bin/env python import sys user_name = "carson" this_year = 2014 counter  = 0 while True:     if counter < 3:         name =