Python文件读取

为什么利用read()方法不可以对文中单词进行计数?


```python

f = open('F:/word.txt', 'r', encoding="UTF-8")
content = f.read()
count = 0
for i in content:
    if i == 'itheima':
        count += 1
print(f'文中有{count}个itheima')

word.txt 的内容
itheima itcast python
itheima python itcast
beijing shanghai itheima
shenzhen guangzhou itheima
wuhan hangzhou itheima
zhengzhou bigdata itheima

使用read()是没有错的,但是你的代码里面。f.read()之后你再for循环去处理content,等于就是每一个字符了,应该改为:

with open('F:/word.txt', 'r', encoding="UTF-8") as f:
    content = f.read()

words = content.split()

count = words.count('itheima')

在给定的代码中,使用read()方法读取整个文本文件内容并将其赋值给content变量。然后,您尝试在content中对单词进行计数,但是出现了问题。问题在于,您的代码中并没有正确处理单词的计数,因此无法准确地统计出文本中指定单词出现的次数。

问题出在以下两个地方:

  1. 循环中的条件:您使用for i in content循环遍历content中的每个字符,而不是按单词进行分割后再进行计数。这意味着每个字符都会被遍历一遍,而不是每个单词。

  2. 单词匹配:您的代码试图通过检查i是否等于字符串'itheima'来计数单词,但实际上文本中的单词可能会包含额外的空格或标点符号,因此在文本中找不到准确匹配。

为了正确计数文本中指定单词的出现次数,您可以采取以下步骤:

  1. 将文本内容按照空格进行分割,以获取每个单词。
  2. 遍历分割后的单词列表,统计指定单词出现的次数。

以下是修正后的代码:

with open('F:/word.txt', 'r', encoding="UTF-8") as f:
    content = f.read()

target_word = 'itheima'
words_list = content.split()  # 使用空格分割单词

count = 0
for word in words_list:
    if word == target_word:
        count += 1

print(f'文中有{count}个itheima')

现在,代码将正确地统计文本中单词"itheima"出现的次数,并输出结果。请注意,我们使用with open() as f: 来打开文件,这样可以确保文件在使用后正确关闭。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7477769
  • 你也可以参考下这篇文章:python f.read()读取文件为空
  • 除此之外, 这篇博客: 上手之Python之文件操作中的 read()方法: 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答:

    read()方法是将整个文件内容作为一个字符串返回,而在你的代码中,你是逐个字符遍历字符串,并判断是否等于'itheima'来计数。因此,这就导致了你无法正确计数单词的问题。

    一个比较简单的解决方案是使用split()方法来将字符串拆分成单词列表,然后再进行计数。

    下面是修复后的代码:

    f = open('F:/word.txt', 'r', encoding="UTF-8")
    content = f.read()
    count = 0
    words = content.split()  # 使用split()方法将字符串拆分成单词列表
    for word in words:
        if word == 'itheima':
            count += 1
    print(f'文中有{count}个itheima')
    

    这样,我们先将字符串content通过split()方法拆分成了一个单词列表words,然后再逐个遍历单词进行计数。

    希望能帮到你!如果还有其他问题,欢迎继续提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^