簡體   English   中英

python搜索文件中的單詞列表

[英]python search file for a list of words

首先,我開始嘗試使用以下代碼在文件中搜索一個單詞:

import re

shakes = open("tt.txt", "r")

for line in shakes:
    if re.match("(.*)(H|h)appy(.*)", line):
        print line,

但是,如果我需要檢查多個單詞怎么辦? 我在想也許像for循環之類的東西可以工作,每次在文件中搜索列表中的另一個單詞。

您覺得這樣方便嗎?

只需加入| 作為分隔符。 (?i)不區分大小寫的修飾符有助於進行不區分大小寫的匹配。

for line in shakes:
    if re.search(r"(?i)"+'|'.join(word_lst), line):
        print line,

例:

>>> f = ['hello','foo','bar']
>>> s = '''hello
hai
Foo
Bar'''.splitlines()
>>> for line in s:
        if re.search(r"(?i)"+'|'.join(f), line):
            print(line)


hello
Foo
Bar

沒有正則表達式:

>>> f = ['hello','foo','bar']
>>> s = '''hello
hai
Foo
Bar'''.splitlines()
>>> for line in s:
        if any(i.lower() in line.lower() for i in f):
            print(line)


hello
Foo
Bar

我認為在這里使用正則表達式不是pythonic,因為正則表達式有點隱含。 因此,如果速度不太重要,我會使用循環:

def find_word(word_list, line):
    for word in word_list:
        if word in line:
            return line

with open('/path/to/file.txt') as f:
    result = [find_word(word_list, line.lower()) for line in f.readlines()]  

另一個想法是使用set

下面的代碼假定文件中的所有單詞都用空格隔開,並且word_list是要查找的單詞列表。

shakes = open("tt.txt", "r")
words = set(word_list)
for line in shakes:
    if words & set(line.split()):
        print line,

如果要進行不區分大小寫的搜索,可以將每個字符串轉換為小寫:

shakes = open("tt.txt", "r")
words = set(w.lower() for w in word_list)
for line in shakes:
    if words & set(line.lower().split()):
        print line,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM