python - grep 和 Python

标签 python regex grep

我需要一种通过 Unix 命令行中的正则表达式使用 grep 搜索文件的方法。例如当我在命令行中输入:

python pythonfile.py 'RE' 'file-to-be-searched'

我需要在文件中搜索正则表达式 'RE' 并打印出匹配的行。

这是我的代码:

import re
import sys

search_term = sys.argv[1]
f = sys.argv[2]

for line in open(f, 'r'):
    if re.search(search_term, line):
        print line,
        if line == None:
            print 'no matches found'

但是当我输入一个不存在的单词时,no matches found 不会打印

最佳答案

自然的问题是为什么不直接使用 grep?!但假设你不能......

import re
import sys

file = open(sys.argv[2], "r")

for line in file:
     if re.search(sys.argv[1], line):
         print line,

注意事项:

  • search 而不是 match 来查找字符串中的任意位置
  • print 后的逗号 (,) 删除回车(行会有一个)
  • argv包含python文件名,所以变量需要从1开始

这不处理多个参数(像 grep 那样)或扩展通配符(像 Unix shell 那样)。如果您想要此功能,您可以使用以下方法获得它:

import re
import sys
import glob

for arg in sys.argv[2:]:
    for file in glob.iglob(arg):
        for line in open(file, 'r'):
            if re.search(sys.argv[1], line):
                print line,

关于python - grep 和 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1921894/

相关文章:

python - RegEx 忽略注释行。

linux - 使用命令 grep 并定位

python - 程序 GL 纹理

python - 小于最大数的倍数

PHP 正则表达式删除多个 ?-marks

regex - 查找字符串中以数字开头的单词(正则表达式)

regex - GREP 单个整数而不是整个相似的数字

regex - find -regex 比 find | 慢grep

python - 多处理 numpy 未定义错误

python - 从 json 读取数组,无需任何根对象