【问题标题】:Python loop over opened filePython循环打开文件
【发布时间】:2020-08-04 21:22:32
【问题描述】:

我正在尝试计算“The”一词在文本中出现的次数(大致)。

book1 = 'imitation_of_christ.txt'
book2 = 'jesus_of_history.txt'

with open(book1, encoding='utf-8') as book1:
    lines = book1.readlines()
    word = 'the '
    times = lines.count(word)

    for line in lines:
        times += line.count(word)


    print (f"The word '{word}'' appears roughly {times} times in {book1}.")

我已经编写了代码,但我不明白为什么我需要 'times' 变量来完成这项工作?我试图删除它,但它显示为 0 次。

有没有更有效的方法来做我正在做的事情?

谢谢

【问题讨论】:

  • 如果你没有变量times,你会把计数放在哪里?
  • 你在问为什么需要for line in lines: 循环吗?
  • @Barmar 是的,我编写了代码,并且我确信有时我知道我为什么需要它,但我不记得了。如果它只是一个存储计数的变量,我可以不把它声明为一个空列表吗?
  • 声明什么为空列表?
  • 你在问为什么times = lines.count(word) 没有返回你想要的计数吗?

标签: python loops file


【解决方案1】:

由于lines 是一个列表,lines.count(word) 返回与word 完全相同的行数。这是0,原因有两个:

  1. readlines() 返回的字符串都以换行符结尾(可能最后一行除外)。由于word 不以换行符结尾,因此它永远不会完全匹配其中任何一个。
  2. 即使您删除换行符,您也是在将单个单词与整行进行比较。因此,除非文件每行包含一个单词,并且单词后面有一个空格,否则lines 的元素将永远不会完全匹配word

另一方面,由于line 是单个字符串,line.count(word) 会计算与word 匹配的line 的子字符串数。 for 循环将文件所有行中的子字符串数相加。

请注意,如果您确实有一行只包含 "the ",您的代码会将该单词计算两次。没必要这样做

times = lines.count(word)

在循环之前。你应该初始化times = 0

你也可以使用sum()函数:

times = sum(line.count(word) for line in lines)

【讨论】:

    【解决方案2】:

    这是一个非常简单的方法,可以读取整个文件并计算出现次数:

    book1 = 'imitation_of_christ.txt'
    book2 = 'jesus_of_history.txt'
    
    with open(book1, encoding='utf-8') as book1:
        book = book1.read()
        word = 'the '
        times = book.count(word)
    
        print (f"The word '{word}'' appears roughly {times} times in {book1}.")
    

    【讨论】:

    • 谢谢!这是一个更好的方法!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    相关资源
    最近更新 更多