[英]Count occurences of strings in a text file
我有以下程序,我想在我的文本文件中找到例如字符串'浅粉红色'! 我使用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))
您已将整行拆分为单独的单词:
for word in line.split()
所以在words_gen
没有单词包含light pink
的文字。 它包含light
pink
作为两个单独的单词,以及该行上的所有其他单词。
你需要一个不同的方法; 看看正则表达式。
你的整个方法都是错的。
在我看来,你想检查你的文件中是否存在一组字符串。 你应该使用正则表达式。
这里:
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))
拆分字符串时,它会根据包含空格字符的空格进行拆分
所以稍后,除了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
如果你正在搜索一个巨大的文件,这不是一个好的选择
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.