使用正则表达式函数时返回值不一致

时间:2018-07-31 19:41:07

标签: python regex

我的代码表现得很奇怪,我感觉它与我使用的正则表达式有关。

我正在尝试确定文本文件中的总单词数,唯一单词数和句子数。

这是我的代码:

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。有人可以帮我这两个功能都起作用吗?

2 个答案:

答案 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中,因此不再需要打开文件。