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
循环这样的东西可以工作,每次在文件中搜索列表中的不同单词。
你觉得这样方便吗?
加入word_list,以|
作为分隔符。 (?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
我认为这里使用 regex 不是 pythonic,因为 regex 有点隐含。
所以如果速度不太重要,我会使用循环:
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,
首先,我开始尝试使用以下代码在文件中搜索一个单词:
import re
shakes = open("tt.txt", "r")
for line in shakes:
if re.match("(.*)(H|h)appy(.*)", line):
print line,
但是如果我需要检查多个单词怎么办?我在想也许像 for
循环这样的东西可以工作,每次在文件中搜索列表中的不同单词。
你觉得这样方便吗?
加入word_list,以|
作为分隔符。 (?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
我认为这里使用 regex 不是 pythonic,因为 regex 有点隐含。 所以如果速度不太重要,我会使用循环:
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,