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

这里我只实现了员工信息的查询功能,其它的增删改没有实现。

关于员工信息的画了一个简单的流程图

查询流程图

实现的思路:

1、我们得到要查询的语句先把这个语句做简单的处理得到我们想要的数据

condition = input(">>>:").lower().replace(‘ ‘, ‘‘)  # 不区分大小写   "selectname,agewhereage>20"
ret = condition.split(‘where‘)  # [‘selectage,name‘, ‘age>2‘]

上面可以简单的得到我们从用户输入的地方想要的2个信息

  • 用户想要显示那些信息(比如员工的年龄,名字等)
  • 用户对员工查询的条件(姓名,查找大于多少岁的等)

2、把从用户得到的2个数据分别传入一个为处理用户想要显示那些列的函数中一个传入从员工信息筛选的函数中得到符合条件的员工信息。

处理得到想要查询的内容列表

def get_show_lst(col_condition):
    """
    解析传进来的参数得到我们要显示的列名
    :param col_condition: 用户输入后解析的条件
    :return:列表组成的字典
    """
    # ‘select age,name‘
    col_info_lst = col_condition.split(‘select‘)  # [‘‘, ‘age,name‘]
    col_info = [col_info_item for col_info_item in col_info_lst if col_info_item.strip()]  # [‘age,name‘]
    if "*" in col_info:  # 查询所有信息
        return column_dic.keys()  # dict_keys([‘id‘, ‘name‘, ‘age‘, ‘phone‘, ‘job‘])
    else:
        ret = col_info[0].split(‘,‘)  # [‘age‘, ‘name‘]
        for i in ret:
            if i not in column_dic.keys():  # 判断要显示的列的有没有
                print(‘您输入的查询条件不正确‘)
                sys.exit(0)
        return ret  # [‘age‘, ‘name‘]

筛选到符合条件的信息

def filter_handler(operate, con):
    """
    把文件中符合条件的筛选出来作为一个列表当成元素加入到一个列表中
    :param operate: 用户进行的操作 > | < | = | like
    :param con:用户输入的where条件
    :return:被筛选出来的行按条件转换成列表加入到一个列表中的元素
    """
    # ‘>‘,‘age>2‘
    selected_lst = []
    col, val = con.split(operate)  # age  2
    judge = ‘int(line_lst[column_dic[col]]) %s int(val)‘% operate if operate==‘<‘ or operate==‘>‘ else ‘line_lst[column_dic[col]]‘
    f = open(‘users‘, encoding=‘utf8‘)
    for line in f:
        line_lst = line.strip().split(‘,‘)  # [‘1‘,‘alex‘,‘28‘,‘18765789854‘,‘python‘]
        if eval(judge):
            selected_lst.append(line_lst)
    f.close()
    return selected_lst
def get_selected_line(con):
    """
    获取符合该条件的每一行,并将符合条件的每一行作为一个列表项存储在selected_lst中
    :param con:
    :return: 存储符合条件的行列表
    """
    # ‘age>2‘
    if ‘>‘ in con:
        selected_lst = filter_handler(‘>‘,con)
    elif ‘<‘ in con:
        selected_lst = filter_handler(‘<‘, con)
    elif ‘=‘ in con:
        selected_lst = filter_handler(‘==‘, con.replace(‘=‘,‘==‘))
    elif ‘like‘ in con:
        selected_lst = filter_handler(‘in‘, con)
    return selected_lst

3、把得到的处理后的参数传给显示最后结果的函数

def show(selected_lst, show_lst):
    """
    把符合要求的内容显示出来
    :param selected_lst:  [[‘1‘,‘alex‘,‘28‘,‘18765789854‘,‘python‘],[],]
    :param show_lst: [‘age‘, ‘name‘]
    :return:
    """
    if not selected_lst:
        print(‘您要查询信息不存在‘)
    for i in selected_lst:  # [[‘1‘,‘alex‘,‘28‘,‘18765789854‘,‘python‘],[],]
        for j in show_lst:  # [‘age‘, ‘name‘]
            print(i[column_dic[j]],end=‘ ‘)  # 把同一个人的信息显示在同一行
        print()  # 第二个人换一行输出

下面就是完整的程序代码,不过这里面实现了查询得功能。

import sys
column_dic = {‘id‘: 0, ‘name‘: 1, ‘age‘: 2, ‘phone‘: 3, ‘job‘: 4}  # 文件中每一列的名字和数字的对应关系

# select age,name where age>2
def filter_handler(operate, con):
    """
    把文件中符合条件的筛选出来作为一个列表当成元素加入到一个列表中
    :param operate: 用户进行的操作 > | < | = | like
    :param con:用户输入的where条件
    :return:被筛选出来的行按条件转换成列表加入到一个列表中的元素
    """
    # ‘>‘,‘age>2‘
    selected_lst = []
    col, val = con.split(operate)  # age  2
    judge = ‘int(line_lst[column_dic[col]]) %s int(val)‘% operate if operate==‘<‘ or operate==‘>‘ else ‘line_lst[column_dic[col]]‘
    f = open(‘users‘, encoding=‘utf8‘)
    for line in f:
        line_lst = line.strip().split(‘,‘)  # [‘1‘,‘alex‘,‘28‘,‘18765789854‘,‘python‘]
        if eval(judge):
            selected_lst.append(line_lst)
    f.close()
    return selected_lst
def get_selected_line(con):
    """
    获取符合该条件的每一行,并将符合条件的每一行作为一个列表项存储在selected_lst中
    :param con:
    :return: 存储符合条件的行列表
    """
    # ‘age>2‘
    if ‘>‘ in con:
        selected_lst = filter_handler(‘>‘,con)
    elif ‘<‘ in con:
        selected_lst = filter_handler(‘<‘, con)
    elif ‘=‘ in con:
        selected_lst = filter_handler(‘==‘, con.replace(‘=‘,‘==‘))
    elif ‘like‘ in con:
        selected_lst = filter_handler(‘in‘, con)
    return selected_lst

def get_show_lst(col_condition):
    """
    解析传进来的参数得到我们要显示的列名
    :param col_condition: 用户输入后解析的条件
    :return:列表组成的字典
    """
    # ‘select age,name‘
    col_info_lst = col_condition.split(‘select‘)  # [‘‘, ‘age,name‘]
    col_info = [col_info_item for col_info_item in col_info_lst if col_info_item.strip()]  # [‘age,name‘]
    if "*" in col_info:  # 查询所有信息
        return column_dic.keys()  # dict_keys([‘id‘, ‘name‘, ‘age‘, ‘phone‘, ‘job‘])
    else:
        ret = col_info[0].split(‘,‘)  # [‘age‘, ‘name‘]
        for i in ret:
            if i not in column_dic.keys():  # 判断要显示的列的有没有
                print(‘您输入的查询条件不正确‘)
                sys.exit(0)
        return ret  # [‘age‘, ‘name‘]
def show(selected_lst, show_lst):
    """
    把符合要求的内容显示出来
    :param selected_lst:  [[‘1‘,‘alex‘,‘28‘,‘18765789854‘,‘python‘],[],]
    :param show_lst: [‘age‘, ‘name‘]
    :return:
    """
    if not selected_lst:
        print(‘您要查询信息不存在‘)
    for i in selected_lst:  # [[‘1‘,‘alex‘,‘28‘,‘18765789854‘,‘python‘],[],]
        for j in show_lst:  # [‘age‘, ‘name‘]
            print(i[column_dic[j]],end=‘ ‘)  # 把同一个人的信息显示在同一行
        print()  # 第二个人换一行输出

def sele_search():
    condition = input(">>>:").lower().replace(‘ ‘, ‘‘)  # 不区分大小写   "selectname,agewhereage>20"
    ret = condition.split(‘where‘)  # [‘selectage,name‘, ‘age>2‘]
    show_lst = get_show_lst(ret[0])  # ‘selectage,name‘   return: [‘age‘, ‘name‘]
    selected_lst = get_selected_line(ret[1])  # ‘age>2‘  return: [[‘1‘,‘alex‘,‘28‘,‘18765789854‘,‘python‘],[],]
    show(selected_lst,show_lst)  # 在屏幕上打印查出来的结果
# sele_search()
if __name__ == "__main__":
    di = {
        1:‘查询‘,
        2:‘修改‘,
        3:‘增加‘,
        4:‘删除‘
    }
    li = [sele_search,]
    while True:
        for i in di:
            print(i, di[i])
        num = int(input(‘>>>:‘))
        li[num-1]()

原文地址:https://www.cnblogs.com/yang-China/p/9229892.html

时间: 2024-10-29 02:37:33

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

Python学习之路—2018/6/29

Python学习之路-2018/6/29 1.跨表查询 跨表查询: 基于对象查询 基于双下划线查询 聚合和分组查询 F与Q查询 F查询 过滤器只能讲字段值与常量进行比较,如果需要用到与字段值进行比较则需要用到F查询,F查询还支持与常量之间的加减乘除的运算.数据: # 查询评论数大于阅读数的书籍 >>> Book.objects.filter(comment_count__gt=F("read_count")) <QuerySet [<Book: 斗破苍穹&

Python学习之路—2018/7/10

Python学习之路-2018/7/10 博客开发项目流程 ? 一般来说,一个项目的开发流程分为:项目需求.设计表结构.功能开发.测试功能.产品上线,本次学习以博客园为蓝本进行开发. 1.项目需求 博客的开发的需求主要有以下几点: 基于auth模块和Ajax实现登录验证 基于forms组件和Ajax实现注册功能 设计博客首页 设计个人站点页面 设计文章详情页面 实现文章点赞功能 实现文章的评论功能,包括对文章的评论以及对文章评论的评论 实现富文本编辑框 防止xss攻击(例如当用户的文章中含有JS

Python学习之路—2018/7/11

Python学习之路-2018/7/10 3.功能开发 3.1 登录验证 login.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <t

Python 学习之路(二)

Python 学习之路(二) 以下所用的是Python 3.6 一.条件语句 简单判断 1 if 判断条件: 2 执行语句-- 3 else: 4 执行语句-- 复杂判断 1 if 判断条件1: 2 执行语句1-- 3 elif 判断条件2: 4 执行语句2-- 5 elif 判断条件3: 6 执行语句3-- 7 else: 8 执行语句4-- 二.循环语句 2.1 while语句 和其他语言一样,不同的是多了else语句.在 python 中,while - else 在循环条件为 false

Python 学习之路(三)

Python 学习之路(三) 以下所用的是Python 3.6 一.集合部分 集合是一个无序的,不重复的数据集合,主要用来去重,以及关系测试:交集,差集,并集等 1.1 关系操作 1.1.1 列表去重 可以给列表去重,例如: 1 set_demo = [1,2,3,4,5,3,2,1] # 列表 2 set_demo = set(set_demo) # 转换成集合,来去重 3 print(set_demo) 1.1.2 取交集 intersection()方法 可以获得两个集合的交集部分,例如:

Python学习之路(第一周)

走上软件开发之路已经三个年头.我本人是android原生开发出生.期间由于工作的需要以及开发的趋势发展,也走上混合开发的道路,现在主要运用ionic框架进行移动端app的开发.但是未来的互联网发展趋势还是大数据+人工智能.所以现在学习Python就很有必要.这里就不介绍Python语言的优劣了,想具体了解的小伙伴可以自行度娘吧. 好了,直接步入正题. 本博客主要记录自己接下来几个月的Python学习之路,能力有限,期间有什么表达不对的欢迎大家留言区批评指正! Python版本:Python3.5

Python学习之路—2018/6/14

Python学习之路-2018/6/14 1.浏览器与服务器 浏览器向服务器发送请求的过程为请求过程,服务器向浏览器响应的过程为响应过程. 2.简单的web应用程序 import socket sock = socket.socket() sock.bind(("100.113.14.43", 8080)) sock.listen(5) with open("index.html", "r") as f: # 先将样式写入html文件中,然后再读

Python学习之路—2018/6/19

Python学习之路-2018/6/19 1.注册自定义转化器 converts.py class Birthday: regex = '[0-9]{8}' # 匹配规则 def to_python(self, value): # 匹配的字符串返回具体的变量值,传递到对应的视图函数中 return int(value) def to_url(self,value): # 反向解析 return "%04d" % value urls.py from django.urls import

Python学习之路—2018/6/26

Python学习之路-2018/6/26 1.ORM 单表操作 删除与修改记录 >>> ret = Book.objects.filter(title="go").delete() (1, {'app01.Book': 1}) >>> Book.objects.filter(price=115).update(price=120) 多表操作 创建模型 一对一 models.OneToOneField(to="表名", on_del