def emp():
lis_res = [[],[],[],[],[]] #定义最终存储数据的列表
with open(
'yuangong'
,
'r'
,encoding=
'utf-8'
)
as
f:
cha = input(
'请输入查询语句,格式为:select *** where *** > ***'
).strip()
lis = cha.split(
' '
)#定义存放输入语句的列表
n = [] #n表示符合查询变量的字符串所在列表位置
if
lis[0] ==
'select'
and
lis[2] ==
'where'
:#设定关键字条件
lis1 = lis[1].split(
','
)#定义查询元素的列表
lis_title = f.readline().split(
','
) #文件中第一行为字段名
lis_title = [s.strip()
for
s in lis_title]#列表推导式,去掉每个元素两边的空格
for
v in lis1:#循环遍历要查询的字段是否在文件中
if
v in lis_title:
n.append(lis_title.index(v))
if
'*'
in lis[1]:n=[0,1,2,3,4]#定义使用*模糊查询
if
n == []: #如果字段不存在则退出程序
print
(
'查询的字段不存在'
)
return
if
lis[4] ==
'>'
:#检查条件语句是否是大于号
if
lis[3] in lis_title: #字段是否包含条件语句
m = lis_title.index(lis[3]) #m表示符合条件语句的字符串所在列表位置
else
:
print
(
'字段不含有该条件'
)
return
for
v in f:
lis_f = v.split(
','
)#把取出来的每条数据都转化成列表
lis_f = [s.strip()
for
s in lis_f] #列表推导式,去掉每个元素两边的空格
if
lis_f[m].isdigit()
and
lis[5].isdigit():#检查条件是否都为数字
if
int(lis_f[m]) > int(lis[5]):
for
i in n:#如果条件成立则把结果追加到lis_res中
lis_res[i].append(lis_f[i])
else
:
print
(
'无法进行比较'
)
elif lis[4] ==
'<'
:#检查条件语句是否是大于号
if
lis[3] in lis_title: #字段是否包含条件语句
m = lis_title.index(lis[3]) #m表示符合条件语句的字符串所在列表位置
else
:
print
(
'字段不含有该条件'
)
return
for
v in f:
lis_f = v.split(
','
)#把取出来的每条数据都转化成列表
lis_f = [s.strip()
for
s in lis_f] #列表推导式,去掉每个元素两边的空格
if
lis_f[m].isdigit()
and
lis[5].isdigit():#检查条件是否都为数字
if
int(lis_f[m]) < int(lis[5]):
for
i in n:#如果条件成立则把结果追加到lis_res中
lis_res[i].append(lis_f[i])
else
:
print
(
'无法进行比较'
)
elif lis[4] ==
'='
:#检查条件语句是否是大于号
if
lis[3] in lis_title: #字段是否包含条件语句
m = lis_title.index(lis[3]) #m表示符合条件语句的字符串所在列表位置
else
:
print
(
'字段不含有该条件'
)
return
for
v in f:
lis_f = v.split(
','
)#把取出来的每条数据都转化成列表
lis_f = [s.strip()
for
s in lis_f] #列表推导式,去掉每个元素两边的空格
if
lis_f[m] == lis[5]:
for
i in n:#如果条件成立则把结果追加到lis_res中
lis_res[i].append(lis_f[i])
elif lis[4] ==
'like'
:#定义like模糊搜索
if
lis[3]in lis_title:
m = lis_title.index(lis[3]) #m表示符合条件语句的字符串所在列表位置
else
:
print
(
'字段不含有该条件'
)
return
for
v in f:
lis_f = v.split(
','
)#把取出来的每条数据都转化成列表
lis_f = [s.strip()
for
s in lis_f] #列表推导式,去掉每个元素两边的空格
if
lis[5] in lis_f[m]:
for
i in n:
lis_res[i].append(lis_f[i])
else
:
print
(
'请以空格将各个名字隔开'
)
else
:
print
(
'请输入正确的指令'
)
if
n!= []:#防止乱输指令后报错
for
i in range(len(lis_res[n[0]])):#输出结果
for
k in n:
print
(lis_res[k][i],
end
=
' '
)
print
(
'\n'
,
end
=
''
)
emp()