在 "for" 循环中使用 readlines() 和 count()?

using readlines() and count() in a "for" loop?

在Codio中,有一个挑战,取一个文件,搜索一个文件的次数 字符串出现在其中,然后打印该数字。我能够使用一些建议得到结果,但我仍然不清楚一些事情。

主要问题是,循环在什么时候搜索子字符串 S?我随处可见的 count() 语法涉及使用要搜索的字符串,然后是点运算符,然后是我们要查找的子字符串作为参数的函数。它看起来像:P.count(S)

让我感到困惑的是函数使用 line 代替了 P。那么这是否意味着该函数正在搜索 line 的子字符串?如果是这样,如果 line 只是 for 循环的计数器变量,它是如何工作的?我只是想更清楚地了解这个函数在这种情况下是如何工作的,以便让我正确计算子字符串 S 在文件 P 中出现的次数。

import sys
P= sys.argv[1]
S= sys.argv[2]

# Your code goes here

f = open(P, 'r')
c = 0

for line in f.readlines():
  c += line.count(S)

print(c)

does this mean the function is searching "line" for the substring

是的,就是这个意思。 line 的值在每次循环迭代中都会发生变化。

And if so, how does that work if "line" is simply the counter variable for the "for" loop

不是。 Python for 循环没有计数器。 line 是实际的文本行。

for letter in ['A', 'B', 'C']:
    print(letter)

打印

A
B
C

让我们剖析循环:

for line in f.readlines():
  c += line.count(S)

f 是您打开的文件的文件描述符。

readlines 是一个 生成器 ,一种类似于 returns 文件行的函数。如果你把它想象成一个字符串列表,每个字符串都是文件的一行,你就可以理解循环操作了。

因此,语句 for line in f.readlines(): 通过文件内容迭代变量 line;在每次循环迭代中,line 将是适当的字符串值,即文件的下一行。

因此,line.count(S) returns 目标字符串 S 在文件的该行中出现的次数。增量 c += 将其添加到您的计数器中。

这样说够清楚了吗?


顺便说一句,请学会使用描述性变量名。单字母大小写混合的名字在长运行.

中是个坏习惯