尝试从日志文本(.txt)文件中搜索不区分大小写的关键字

问题描述 投票:0回答:5

我有一个会话的日志文件。我想在文件中搜索我已分配的某些关键字,但日志文件可能包含我正在搜索的关键字的大写,小写和标题区分大小写的单词。

我可以提取具有小写关键字但但不能获得该单词的大写或标题案例版本的轮廓。我怎么解决这个问题?

我试过用

if (words.title() and words.lower()) in line:
     print (searchInLines[i])

但这似乎不起作用。

keywords=['bimbo', 'qualified', 'tornadoes', 'alteryx', 'excel', 'manchester']


with open("recognition_log.txt", "r", encoding="utf8") as f:
    searchInLines = f.readlines()
    f.close()

for words in keywords:
    for i, line in enumerate(searchInLines):
        if (words.title() and words.lower()) in line:
            print (searchInLines[i])

例如,日志文件包含以下句子:

“曼联昨天在巴塞罗那打球,但曼彻斯特俱乐部失利了”

我的关键字中有“manchester”,所以它会选择第二个而不是第一个。

我怎么能识别这两个?

提前致谢!

python keyword keyword-search
5个回答
1
投票

我不完全确定你要做什么,但我认为它过滤掉了包含keywords中的一个单词的消息(行)。这是一个简单的方法:

keywords=['bimbo', 'qualified', 'tornadoes', 'alteryx', 'excel', 'manchester']

with open("recognition_log.txt", "r", encoding="utf8") as f:
    searchInLines = f.readlines()
    f.close()

for line in searchInLines:
    for keyword in keywords:
        if keyword in line.lower():
            print(line)

2
投票

使用正则表达式

例如:

import re

keywords=['bimbo', 'qualified', 'tornadoes', 'alteryx', 'excel', 'manchester']


with open("recognition_log.txt", "r", encoding="utf8") as f:
    searchInLines = f.readlines()

#pattern = re.compile("(" + "|".join(keywords) + ")", flags=re.IGNORECASE)
pattern = re.compile("(" + "|".join(r"\b{}\b".format(i) for i in keywords) + ")", flags=re.IGNORECASE)
for line in searchInLines:
    if pattern.search(line):
        print(line)

1
投票

首先,当你使用上下文管理器时,你不需要f.close()。

至于解决方案,我建议你在这种情况下使用正则表达式

import re
keywords=['bimbo', 'qualified', 'tornadoes', 'alteryx', 'excel', 'manchester']
# Compiling regext pattern from keyword list
pattern = re.compile('|'.join(keywords))

with open("recognition_log.txt", "r", encoding="utf8") as f:
    searchInLines = f.readlines()

for line in searchInLines:
    # if we get a match
    if re.search(pattern, line.lower()):
        print(line)

0
投票

您可以将行和关键字转换为大写或小写并进行比较。

keywords = ['bimbo', 'qualified', 'tornadoes', 'alteryx', 'excel', 'manchester']

with open("test.txt", "r", encoding="utf8") as f:
    searchInLines = f.readlines()
    f.close()

for words in keywords:
    for i, line in enumerate(searchInLines):
        if words.upper() in line.upper():
            print(searchInLines[i])

0
投票

(1)嗯,你的单词是小写的,所以“words.lower()”没有效果。 (2)如果您不使用“曼彻斯特”和“曼彻斯特”,则不会找到您的例句,因为您使用的是“和”逻辑。 (3)我相信,你想要的是:“如果在行中的话。更低():”

© www.soinside.com 2019 - 2024. All rights reserved.