文件查询 select name,age where age>22
# 员工信息表: 完善代码,背下来给代码加注释
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的更多相关文章
- Oracle 查询(SELECT)语句(一)
Ø 简介 本文介绍 Oracle 中查询(SELECT)语句的使用,在 SQL 中 SELECT 语句是相对内容较多的,也是相对比较复杂一点的,所以这里拿出来单独学习. 首先,我们先来理一下思路,我 ...
- mysql 查询select语句汇总
数据准备: 创建表: create table students( id int unsigned primary key auto_increment not null, name varchar( ...
- Mybatis实体类的映射文件中select,insert语句使用
id:在命名空间中唯一的标识符,可以被用来引用这条语句. parameterType:设置传入这条语句的参数的数据类型,如int,String...... resultType:设置从这条语句中返回数 ...
- [刘阳Java]_MyBatis_映射文件的select标签入门_第3讲
1.Mybatis映射文件的<select>标签主要帮助我们完成SQL语句查询功能,<select>标签它包含了很多属性,下面简单对<select>标签的属性做一个 ...
- SqlServer:SqlServer(xpath,字段约束,时间查询,数据文件查询及还原,压缩备份)
1.xpath --1.文档 select @data --2.任意级别是否存在price节点 select @data.exist('//price') --3.获取所有book节点 select ...
- Java-MyBatis-MyBatis3-XML映射文件:select
ylbtech-Java-MyBatis-MyBatis3-XML映射文件:select 1.返回顶部 1. select 查询语句是 MyBatis 中最常用的元素之一,光能把数据存到数据库中价值并 ...
- sql_查询select
sql_查询select /****** Script for SelectTopNRows command from SSMS ******/ [r_gonghao] ,[r_mingzi] , ...
- 查询select
--------------select查询-------------------查询所有信息(方法一)select * from stuinfo --*号代表所有列--查询所有信息(方法二)sele ...
- mysql数据库(二):查询(SELECT)
一. 数据库查询—查询(SELECT) 单表查询 多表联合查询 二. 查询—单表查询 查询特定字段: select <字段1,字段2,...> from <表名>; 示例:查询 ...
随机推荐
- EGADS介绍(二)--时序模型和异常检测模型算法的核心思想
EDADS系统包含了众多的时序模型和异常检测模型,这些模型的处理会输入很多参数,若仅使用默认的参数,那么时序模型预测的准确率将无法提高,异常检测模型的误报率也无法降低,甚至针对某些时间序列这些模型将无 ...
- 4.Direct交换机之使用指定routingkey完成日志记录场景
标题 : 4.Direct交换机之使用指定routingkey完成日志记录场景 目录 : RabbitMQ 序号 : 4 const string logOthersQueueName = " ...
- 网络安全知识--PHP代码审计/Web For Pantesters 的 SQL injection
SQL 注入一般流程 判断有无注入 单引号判断: ?name=root' 对应语句 select * from table where name='root'' 不符合语法规范,报错,说明有注入 an ...
- python了解未知函数的方法
?func 如图:
- C# 类 (8) - 抽象方法
抽象 抽象方法 只能 定义在抽象类 里,并且抽象方法里没有具体的代码,像这种 为啥要定义一个空空如也的函数呢?这是为了用来约束 它的派生类 的行为, 这个例子,建立了一个数组,放了cat和dog,这两 ...
- SPOJ - LCS2 Longest Common Substring II(后缀自动机)题解
题意: 求\(n\)个串的最大\(LCS\). 思路: 把第一个串建后缀自动机,然后枚举所有串.对于每个串,求出这个串在\(i\)节点的最大匹配为\(temp[i]\)(当前串在这个节点最多取多少), ...
- JavaScript调试技巧之console.log()
与alert()函数类似,console.log()也可以接受变量并将其与别的字符串进行拼接: 代码如下: //Use variable var name = "Bob"; con ...
- CDN maxcdn for speed up
https://www.maxcdn.com/ The Next Generation CDN.Plug into a whole new level of speed.From: https://w ...
- GitHub Packages
GitHub Packages https://github.com/xgqfrms?tab=packages // Step 1: Use `publishConfig` option in you ...
- switchable css dark theme in js & html custom element
switchable css dark theme in js & html custom element dark theme / dark mode https://codepen.io/ ...