与linux命令grep A等价的python代码是什么?

2024-10-02 00:31:48 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用python打印文件中匹配字符串后的n行?在

Linux命令grep

 abc@xyz:~/Desktop$ grep -A 10 'foo' bar.txt
      foo
      <shippingcost>
        <amount>3.19</amount>
        <currency>EUR</currency>
      </shippingcost>
      <shippingtype>Normal</shippingtype>

      <quality>GOOD</quality> 
      <unlimitedquantity>false</unlimitedquantity>
      <isrsl>N</isrsl> 
      <stock>1</stock>

此命令将在文件中匹配的字符串“foo”后打印10行条形图.txt在

使用Python如何做同样的事情?在

我尝试了:

^{pr2}$

上面的Python代码给出了以下输出:

abc@xyz:~/Desktop$ python grep.py
['foo']

Tags: 字符串命令txtfooamountgrepcurrencyabc
2条回答

file对象,如origin_file是迭代器。不仅可以使用

for line in origin_file:

但也可以使用next(origin_file)从迭代器获取下一项。 实际上,您可以从for-loop内调用迭代器上的next

^{pr2}$

如果没有额外的10行代码,上面的代码将引发StopIteration错误 在找到最后一个foo之后。要处理这种可能性,可以使用^{} 要从迭代器中最多分割10个项目:

import re
import itertools as IT

with open("bar.txt") as origin_file:
    for line in origin_file:
        if re.search(r'foo', line):
            print line, 
            for line in IT.islice(origin_file, 10):
                print line,

现在代码将优雅地结束(不引发StopIteration异常),即使有 不是foo之后的10行。在

这是因为您指定给行,而您没有从file对象读取行,请将其更改为:

import re
with open("bar.txt") as origin_file:
for line in origin_file.readlines():
    found = re.findall(r'foo', line)
    if found:
        print line

相关问题 更多 >

    热门问题