我是python的新手,我正试图弄清楚如何从元组或列表中执行grep。
我有一个像这样的查询结果:
[(123456, '123_ABC', 'abc123defa', '/path/whatever', 11111L, 'YES'),
(789456, '123_DEF', 'abc123defb', '/path/whatever/0', 11111H, 'NO'),
(234567, '123_GHI', 'abc123defc', '/path/whatever/1', 11111T, 'NO')]
查询的结果有多行,如上例所示。用户输入他正在寻找的“grep”字符串,让我们说“789456”,因此结果应该只打印:
789456, '123_DEF', 'abc123defb', '/path/whatever/0', 11111H, 'NO'
也许,平面文本没有引号并以“|”分隔(我不知道我以后真的可以处理那件事)。
所以我的问题是,我是否应该首先将元组更改为列表然后尝试创建一个函数来执行“grep”?如果我把它作为一个元组并且从那里做“grep”,它是一样的吗?我正在寻找一些没有循环数据的东西。
只需保持具有789456
的行与列表理解:
queries = [(123456, '123_ABC', 'abc123defa', '/path/whatever', '11111L', 'YES'),
(789456, '123_DEF', 'abc123defb', '/path/whatever/0', '11111H', 'NO'),
(234567, '123_GHI', 'abc123defc', '/path/whatever/1', '11111T', 'NO')]
to_keep = 789456
print([query for query in queries if to_keep in query])
# [(789456, '123_DEF', 'abc123defb', '/path/whatever/0', '11111H', 'NO')]
或者与filter()
:
list(filter(lambda x: to_keep in x, queries))
您可以使用in
来检查值是否在元组中。
例如:
d = [(123456, '123_ABC', 'abc123defa', '/path/whatever', 11111, 'YES'),(789456, '123_DEF', 'abc123defb', '/path/whatever/0', 11111, 'NO'),(234567, '123_GHI', 'abc123defc', '/path/whatever/1', 11111, 'NO')]
for i in d:
if 789456 in i:
print i
输出:
(789456, '123_DEF', 'abc123defb', '/path/whatever/0', 11111, 'NO')