【发布时间】:2021-01-04 06:09:01
【问题描述】:
我想 grep 模式并将其返回给一个变量,对于多个文件,我知道如何使用 bash 来完成,但现在我想在 python 中实现它。
在 bash 中,我可以做这样的事情
for i in {1..3}
do
result=$(grep "pattern" folder/name-${i}/out)
done
但是,我不确定如何在 Python 中执行此操作。 我试过了:
for i in range(1,4):
name = 'name-' + str(i)
result = subprocess.check_output("grep 'pattern' folder/{name}/out", shell=True)
返回错误grep: folder/{name}/out: No such file or directory
有人知道怎么解决吗?
【问题讨论】:
-
错误自行解释,
folder/{name}/out不是有效路径 -
您在字符串之前错过了
f,使其成为 f 字符串。 -
字符串中的变量未解析为变量。您需要格式化字符串。另外,如果您想在 Python 中“更多”地解决它:regex101.com 网站上有一个 Python 代码生成器。因为你还在 sh 中做正则表达式的工作。
-
从 Python 运行
grep几乎总是很容易通过在 Python 本身中进行正则表达式搜索来避免。避免外部流程通常会带来性能上的提升,而且您通常可以通过本地处理来优化整体流程。简单来说;import re; with open(f'folder/{name}/out') as thing: result = [line for line in thing if re.match('pattern', line)]
标签: python bash grep subprocess