我有以下程序,我想在我的文本文件中找到例如字符串'light pink'!
我使用word==' '.join(['light','pink'])
但它不起作用。
from operator import itemgetter
def mmetric1(file):
words_gen = (word.lower() for line in open("test.txt")
for word in line.split())
words = {}
for word in words_gen:
if (word=='aqua')or(word=='azure')or(word=='black')or(word=='light pink'):
words[word] = words.get(word, 0) + 1
top_words = sorted(words.items(), key=itemgetter(1))
for word, frequency in top_words:
print ("%s : %d" % (word, frequency))
答案 0 :(得分:1)
您已将整行拆分为单独的字词:
for word in line.split()
因此words_gen
中没有包含文字light pink
的单个词。它包含light
和pink
作为两个单独的单词,以及该行上的所有其他单词。
你需要一种不同的方法;看看正则表达式。
答案 1 :(得分:1)
你的整个方法都是错误的。
在我看来,您想要检查文件中是否存在一组字符串。你应该使用正则表达式。
下面:
from collections import Counter
import re
def mmetric1(file_path, desired):
finder = re.compile(re.escape('(%s)' % '|'.join(desired)), re.MULTILINE)
with open(file_path) as f:
return Counter(finder.findall(f))
# have a list of the strings you want to find
desired = ['aqua', 'azure', 'black', 'light pink']
# run the method
mmetric1(file_path, desired)
如果您担心大文件和性能,可以迭代文件中的行:
def mmetric1(file_path, desired):
results = Counter()
finder = re.compile(re.escape('(%s)' % '|'.join(desired)))
with open(file_path) as f:
for line in f:
Counter.update(finder.findall(line))
return results
要打印这些结果,请使用自己的结果:
for word, frequency in mmetric1(file_path, desired).items():
print ("%s : %d" % (word, frequency))
答案 2 :(得分:0)
分割字符串时,它的分割基于空白,包括空格字符
所以稍后,除了IF之外,你不可能以你提议的方式匹配连续的单词
示例代码
try:
while True:
word = next(words_gen)
if any(word == token for token in ['aqua', 'azure', 'black']) \
or (word == 'light' and next(word) == 'pink'):
words[word] = words.get(word, 0) + 1
except StopIteration:
pass
如果您正在搜索大文件,那么这不是一个好的选择