我正在尝试创建两个功能。一个使用两个参数,一个文件名和一个关键字。它需要突出显示单词并返回突出显示的单词或带有行号的单词。
第二个函数计算文件中特定单词出现的次数。再次使用一个参数,即文件名和关键字。
这称为突出显示。它需要查看每一行,找到关键字,然后返回该行号,其中关键字突出显示,在左侧用“->”括起来,在右侧用“ <-”括起来。
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
答案 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)