我的代码表现得很奇怪,我感觉它与我使用的正则表达式有关。
我正在尝试确定文本文件中的总单词数,唯一单词数和句子数。
这是我的代码:
import sys
import re
file = open('sample.txt', 'r')
def word_count(file):
words = []
reg_ex = r"[A-Za-z0-9']+"
p = re.compile(reg_ex)
for l in file:
for i in p.findall(l):
words.append(i)
return len(words), len(set(words))
def sentence_count(file):
sentences = []
reg_ex = r'[a-zA-Z0-9][.!?]'
p = re.compile(reg_ex)
for l in file:
for i in p.findall(l):
sentences.append(i)
return sentences, len(sentences)
sentence, sentence_count = sentence_count(file)
word_count, unique_word_count = word_count(file)
print('Total word count: {}\n'.format(word_count) +
'Unique words: {}\n'.format(unique_word_count) +
'Sentences: {}'.format(sentence_count))
输出如下:
Total word count: 0
Unique words: 0
Sentences: 5
真正奇怪的是,如果我注释掉sentence_count()
函数,word_count()
函数将开始工作并输出正确的数字。
为什么会发生这种不一致?如果我注释掉其中一个函数,则一个将输出正确的值,而另一个将输出0。有人可以帮我这两个功能都起作用吗?
答案 0 :(得分:1)
问题在于,您只能对打开的文件进行一次迭代。您需要重新打开或倒带文件以再次遍历它。
例如:
with open('sample.txt', 'r') as f:
sentence, sentence_count = sentence_count(f)
with open('sample.txt', 'r') as f:
word_count, unique_word_count = word_count(f)
或者,f.seek(0)
将倒带该文件。
答案 1 :(得分:0)
确保正确打开和关闭文件。一种方法是先保存所有文本。
with open('sample.txt', 'r') as f:
file = f.read()
with
语句可用于打开和安全关闭文件句柄。由于您已将所有内容提取到file
中,因此不再需要打开文件。