计算以a或a开头的单词从fi中出现的次数

2024-10-04 01:23:30 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我有一个程序,它应该读取一个文件英语排序.txt,并计算以“a”或“a”开头的单词出现的次数。我应该用一个模式对象。我真的不确定我错过了什么/错了什么。我很感激你的帮助。你知道吗

import sys
import re

count = 0
x = open("englishsorted.txt", "r")

while 1:
    pattern = x.readline()
    if pattern == re.compile(r'^[A,a].'): #regex that finds words starting with an A or a
    count = count + 1

x.close()

print count

Tags: 文件对象import程序retxt排序count
3条回答

好的,首先您需要识别count = count + 1。 有一个更好的方法:

count += 1

现在你看不到任何输出仅仅因为你的程序从不停止。这是由while 1:引起的。你从来没有把一个条件,停止你的周期。你知道吗

要停止它,请使用break,如下所示:

while 1:
    pattern = x.readline()

    if pattern == "":
        break

    if pattern == re.compile(r'^[A,a].'):
        count += 1

有关文件读写的更多信息,请阅读docs,或参阅下面的内容。你知道吗

那么,你的正则表达式不起作用了。。。我有一个不同的方法:当一个单词的第一个字母是其中一个时,它以“a”或“a”开头,所以:

if pattern[0] == "A" or pattern[0] == "a":
    count += 1

我认为逐行读取文件和您一样有点棘手,因此我建议您这样做:

x = open("englishsorted.txt", "r")
count = 0

for line in x:
    # do something with line, in your case:
    if line[0] == "A" or line[0] == "a":
        count += 1

编辑

下面是正则表达式的解决方案:

import re

x = open("englishsorted.txt", "r")
count = 0

for line in x:
    if re.match("^[aA]", line):
        count += 1

^匹配字符串的开头,[aA]表示一组字符,与docs一致。你知道吗

好吧,让我们从你犯的错误开始。你知道吗

  • 您创建了一个无限循环,它不会在文件末尾中断。

  • 您将模式与文本行(您混淆地称之为pattern)进行比较。这两个是非常不同的东西;一个是类型str,另一个是类型_sre.SRE_Pattern。试着'abc' == re.compile(r'^[A,a].')看看我在说什么。你应该to use the pattern in a search/match instead

你也在一次读一行,同时你可以在每行的开头进行模式搜索。你知道吗

pattern = re.compile(r'^[A,a].*', re.MULTILINE)

如果存在re.MULTILINE,则符号^在文件开头和每一新行开头搜索模式。.*只与行的其余部分匹配。点是一个通配符,表示一个字符,带它的星号表示行中的任意多个字符。我添加了这两个字符,所以您可以提取整行。如果你不在乎台词是怎么说的,也不在乎有多少符合你的模式,你可以放弃它们。总而言之,这应该行得通。你知道吗

import re

with open('englishsorted.txt') as f:
    data = f.read()

pattern = re.compile(r'^[A,a].*', re.MULTILINE)
matches = re.findall(pattern, data)

print len(matches)

你的代码有一个无限循环。循环:

while 1:
   pattern = x.readline()
   ...

永远不会结束。你知道吗

您只需按以下方式编写脚本:

import sys

count = 0
x = open("englishsorted.txt", "r")
exit = False

while not exit:
    pattern = x.readline()
    if not pattern:
        exit=True       
    elif pattern.startswith("A") or pattern.startswith("a"):
        count = count + 1       

x.close()

print count

exit变量将帮助脚本完成while循环。你知道吗

相关问题 更多 >