在文件中搜索多个字符串(从文件)并打印该行

时间:2016-06-18 23:24:55

标签: python file search keyword

再次在这里为noob道歉:尝试使用以下代码搜索从关键字读取的多个字符串并在mkdir tmp ; cd tmp tar xzf ../$orig_file.tar.gz bcrypt [your-switches-here] * tar czf ../$modified_file.tar.gz * 中搜索并打印该行。 如果我只有一个关键字,那么它可以工作,但如果我有一个关键字则不行。

bcrypt

3 个答案:

答案 0 :(得分:2)

查找关键字的挑战之一是定义关键字的含义以及如何解析文件的内容以查找完整的关键字集。如果" aa"是关键字,如果匹配" aaa"或者"" aa()"?关键字中是否可以包含数字?

一个简单的解决方案就是说关键字只是字母,并且应该完全匹配连续的字母字符串,忽略大小写。此外,比赛应逐行考虑,而不是逐句考虑。我们可以使用正则表达式来查找字母序列和集合以检查包含,如下所示:

keys.txt

aa bb 

的test.txt

aa is good
AA is good
bb is good
cc is not good
aaa is not good

test.py

import re

keyfile = "keys.txt"
testfile = "test.txt"

keys = set(key.lower() for key in 
    re.findall(r'\w+', open(keyfile , "r").readline()))

with open(testfile) as f:
    for line in f:
        words = set(word.lower() for word in re.findall(r'\w+', line))
        if keys & words:
            print(line, end='')

结果:

aa is good
AA is good
bb is good

为匹配的内容添加更多规则,它会变得更复杂。

修改

假设每行有一个关键字,你只想要一个子字符串匹配(即" aa"匹配" aaa")而不是关键字搜索,你可以做

keyfile = "keys.txt"
testfile = "test.txt"

keys = [key for key in (line.strip() for line in open(keyfile)) if key]

with open(testfile) as f:
    for line in f:
        for key in keys:
            if key in line:
                print(line, end='')
                break

但我只是猜测你的标准是什么。

答案 1 :(得分:0)

include

您正在以一个字符串的形式阅读该行。您需要列出每个逗号分隔的字符串。然后测试每一行的每个键(删除键周围的空格)

这假设您的关键字文件类似于:aa很好,bb很好,垃圾邮件,鸡蛋

答案 2 :(得分:0)

(speed 3)

strsearch()