# 员工信息表: 完善代码,背下来给代码加注释
column_dic = {'id': 0, 'name': 1, 'age': 2, 'phone': 3, 'job': 4} # 将文件每一列的名字和数字的对应关系
# --条件--筛选
def filter_handler(operate, col): # >, age>22
"""
精心筛选工作
:param opertate: 用户要进行的操作是><= like
:param col: 用户输入的where条件
:return: 被选中的所有行组成的列表,其中每一行都是一个列表
"""
select_lst = [] # 被选中的列表
col, val = col.split(operate) # age,22='>','age>22'
col = col.strip() # age
val = val.strip() # 22
judge = 'int(line_lst[column_dic[col]]) %s int(val)'%operate if operate == '<' or operate == '>' else 'line_lst[column_dic[col]] %s val' %operate
f = open('file', encoding='utf-8')
for line in f:
line_lst = line.strip().split(',') # [id, name, 25, phone, job]
if eval(judge):
select_lst.append(line_lst)
f.close()
return select_lst
# 展示符合条件的员工信息
def get_selected_line(con): # con = 'age>22'
"""
获取所有要查找的行,并将每一行作为一个列表项存储在select_lst中
:param con:
:return: 存储了符合条件的行的列表
"""
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: 用户输入的select条件
:return: 列名组成的字典
"""
col_info_lst = col_condition.strip().split('select')
col_info_lst = [col_info_item for col_info_item in col_info_lst if col_info_item.strip()]
if col_info_lst:
col_info = col_info_lst[0].strip()
if '*' == col_info:
return column_dic.keys()
elif col_info:
ret = col_info.split(',')
return [item.strip() for item in ret]
else: print(col_info)
# 读取用户的信息 ---分析信息
def show(selected_lst, show_lst):
"""
展示符合条件的内容
:param selected_lst: 符合条件的行的列表
:param show_lst: 所有要展示的字段
:return: None
"""
for selected_item in selected_lst:
for col in show_lst:
print(selected_item[column_dic[col]], end='')
print()
condition = input(">>>") # 接收用户的指令
# 解析用户的指令
ret = condition.split('where') # ['select name, age', 'age>22']
con = ret[1].strip() # 'age>22'
# 根据select条件解析用户需要展示的内容
show_lst = get_show_lst(ret[0]) # '[NAME,AGE]' = 'select name,age'
# 根据where条件解析用户想查找的内容
select_lst = get_selected_line(con) # selected_lst中存储了所有符合条件的内容
# 将符合条件的内容按照用户的需求展示出来
show(select_lst, show_lst) # 显示

文件查询 select name,age where age>22的更多相关文章

  1. Oracle 查询(SELECT)语句(一)

    Ø  简介 本文介绍 Oracle 中查询(SELECT)语句的使用,在 SQL 中 SELECT 语句是相对内容较多的,也是相对比较复杂一点的,所以这里拿出来单独学习. 首先,我们先来理一下思路,我 ...

  2. mysql 查询select语句汇总

    数据准备: 创建表: create table students( id int unsigned primary key auto_increment not null, name varchar( ...

  3. Mybatis实体类的映射文件中select,insert语句使用

    id:在命名空间中唯一的标识符,可以被用来引用这条语句. parameterType:设置传入这条语句的参数的数据类型,如int,String...... resultType:设置从这条语句中返回数 ...

  4. [刘阳Java]_MyBatis_映射文件的select标签入门_第3讲

    1.Mybatis映射文件的<select>标签主要帮助我们完成SQL语句查询功能,<select>标签它包含了很多属性,下面简单对<select>标签的属性做一个 ...

  5. SqlServer:SqlServer(xpath,字段约束,时间查询,数据文件查询及还原,压缩备份)

    1.xpath --1.文档 select @data --2.任意级别是否存在price节点 select @data.exist('//price') --3.获取所有book节点 select ...

  6. Java-MyBatis-MyBatis3-XML映射文件:select

    ylbtech-Java-MyBatis-MyBatis3-XML映射文件:select 1.返回顶部 1. select 查询语句是 MyBatis 中最常用的元素之一,光能把数据存到数据库中价值并 ...

  7. sql_查询select

    sql_查询select   /****** Script for SelectTopNRows command from SSMS ******/ [r_gonghao] ,[r_mingzi] , ...

  8. 查询select

    --------------select查询-------------------查询所有信息(方法一)select * from stuinfo --*号代表所有列--查询所有信息(方法二)sele ...

  9. mysql数据库(二):查询(SELECT)

    一. 数据库查询—查询(SELECT) 单表查询 多表联合查询 二. 查询—单表查询 查询特定字段: select <字段1,字段2,...> from <表名>; 示例:查询 ...

随机推荐

  1. Codeforces Round #531 (Div. 3) E. Monotonic Renumeration (构造)

    题意:给出一个长度为\(n\)的序列\(a\),根据\(a\)构造一个序列\(b\),要求: ​ 1.\(b_{1}=0\) ​ 2.对于\(i,j(i\le i,j \le n)\),若\(a_{i ...

  2. CodeCraft-20 (Div. 2) C. Primitive Primes (数学)

    题意:给你两个一元多项式\(f(x)\)和\(g(x)\),保证它们每一项的系数互质,让\(f(x)\)和\(g(x)\)相乘得到\(h(x)\),问\(h(x)\)是否有某一项系数不被\(p\)整除 ...

  3. Python_小程序

    一.开发前的准备工作 1.申请AppID:一个账号对应一个小程序,个人/个体只能申请5个小程序 2.下载开发工具 二.小程序的文件结构 三. 1.数据绑定 1.1数据的设置 Page( data:{ ...

  4. 导出Excel出错

    错误提示:   解决方法: 1.运行dcomcnfg打开组件服务. 2.依次展开"组件服务"->"计算机"->"我的电脑"-&g ...

  5. VS2010下创建MVC4项目注意事项

    1.安装VS SP1. 2.安装NuGet Package Manager. (1)打开VS2010,进入"工具--扩展管理器". (2)点击"联机库",等待搜 ...

  6. 设计模式(二十三)——策略模式(Arrays源码分析)

    1 编写鸭子项目,具体要求如下: 1) 有各种鸭子(比如 野鸭.北京鸭.水鸭等, 鸭子有各种行为,比如 叫.飞行等) 2) 显示鸭子的信息 2 传统方案解决鸭子问题的分析和代码实现 1) 传统的设计方 ...

  7. UESTC - 1222 Sudoku(深搜)

    Yi Sima was one of the best counselors of Cao Cao. He likes to play a funny game himself. It looks l ...

  8. codeforces 5D

    D. Follow Traffic Rules time limit per test 1 second memory limit per test 64 megabytes input standa ...

  9. springboot项目打war包

    spring官方教程地址(包含打war包和打jar包的):https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#b ...

  10. Java中Class.forName()用法和newInstance()方法详解

    1.Class.forName()主要功能 Class.forName(xxx.xx.xx)返回的是一个类, Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,也就 ...