计数和突出显示出现问题

时间:2019-03-27 21:48:08

标签: python python-3.x

我正在尝试创建两个功能。一个使用两个参数,一个文件名和一个关键字。它需要突出显示单词并返回突出显示的单词或带有行号的单词。

第二个函数计算文件中特定单词出现的次数。再次使用一个参数,即文件名和关键字。

这称为突出显示。它需要查看每一行,找到关键字,然后返回该行号,其中关键字突出显示,在左侧用“->”括起来,在右侧用“ <-”括起来。

def highlight(filename, keyword):
    inpt = open(filename, "r")
    for line in inpt:
        if re.match(keyword, line):
            print ('-->',line,'<--')

此函数使用文件名和关键字,并计算文件中特定单词出现的次数,然后返回计数。

def count_word(filename, keyword):
    fname = (filename)
    word= (keyword)
    count = 0
    with open(fname, 'r') as in_file:
        for line in in_file:
            words = line.split()
            for i in words:
                if(i==word):
                    count=count+1
                print (count)

我的方向完全错误吗?我有没有关门?

文本文件显示为:

I heart Rocket!
Rocket, Rocket, Rocket.
Don't say it.
Rocket, Rocket, Rocket!





Rocket!!!

现在我得到:

highlight:
printed:
--> Rocket, Rocket, Rocket.
 <--
--> Rocket, Rocket, Rocket!
 <--
--> Rocket!!!
 <--

expected:
1:   I heart -->Rocket<--!
2:   -->Rocket<--, -->Rocket<--, -->Rocket<--.
4:   -->Rocket<--, -->Rocket<--, -->Rocket<--!
10:  -->Rocket<--!!!


count_word:

printed:
0
0
0
0
0
0
0
0
0
0
0
0
0

expected:
8

1 个答案:

答案 0 :(得分:1)

如果迭代文件中的行,则每行以换行符'\n'结尾。

如果在'-->'之前加上'<--',则在换行符后 处添加'<--'。您可以更改代码,删除\ n并添加<-..,但这可以轻松得多:

创建文件:

with open("k.txt","w") as f:
    f.write("""I heart Rocket!
Rocket, Rocket, Rocket.
Don't say it.
Rocket, Rocket, Rocket!





Rocket!!!""")

处理文件:

with open("k.txt") as f:

    # read all text
    text = f.read()

    # replace Rocket with -->Rocket<-- and store as text2
    text2 = text.replace("Rocket","-->Rocket<--")

    # split at \n, enumerate result starting at 1, remove any line 
    # that does not contain Rocket, join with \n
    text3 = text2.split("\n")
    text4 = [f"{row:2d} {x}" for row,x in enumerate(text3,1) if "Rocket" in x]
    text5 = "\n".join(text4)

    # Count rockets and print replaced text
    print(text.count("Rocket")) 
    print(text3)
    print(text4)
    print(text5)

输出:

# the rocket count
8  

# text3: all lines
['I heart -->Rocket<--!', '-->Rocket<--, -->Rocket<--, -->Rocket<--.', "Don't say it.", 
'-->Rocket<--, -->Rocket<--, -->Rocket<--!', '', '', '', '', '', '-->Rocket<--!!!']

# text4: with enumeration of line number 
[' 1 I heart -->Rocket<--!', ' 2 -->Rocket<--, -->Rocket<--, -->Rocket<--.', 
 ' 4 -->Rocket<--, -->Rocket<--, -->Rocket<--!', '10 -->Rocket<--!!!']

 # joined together again 
 1 I heart -->Rocket<--!
 2 -->Rocket<--, -->Rocket<--, -->Rocket<--.
 4 -->Rocket<--, -->Rocket<--, -->Rocket<--!
10 -->Rocket<--!!!

如果您想使自己困惑,可以将其作为4衬套:

with open("k.txt") as f:
    text = "\n".join( 
        [f"{row:2d} {x}" for row,x 
         in enumerate( f.read().replace("Rocket","-->Rocket<--").split("\n"),1) 
         if "Rocket" in x])
    print(text.count("Rocket")) 
    print(text)