使用Python统计文本文件中的行数、单词数和字符数

13 投票
5 回答
126357 浏览
提问于 2025-04-16 10:31

我在用Python统计文本文件中某些元素时遇到了一些困难。我学习Python已经几个月了,以下这些函数我都比较熟悉:

  • raw_input
  • open
  • split
  • len
  • print
  • rsplit()

这是我目前写的代码:

fname = "feed.txt"
fname = open('feed.txt', 'r')

num_lines = 0
num_words = 0
num_chars = 0

for line in feed:
    lines = line.split('\n')

现在我不知道接下来该怎么做。我觉得最合理的方式是先统计行数,再统计每一行中的单词数量,最后统计每个单词中的字符数量。但是我遇到的问题是,想要一次性完成所有必要的操作,而不想每次都重新打开文件来单独执行每个操作。

5 个回答

2

当然可以!请看下面的内容:

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当用户点击一个按钮时,我们希望程序能做出反应。这种情况下,我们就会用到“事件”这个概念。

事件就像是生活中的一些事情,比如你按下电灯开关,灯就亮了。编程里的事件也是类似的,当某个特定的事情发生时,程序就会执行相应的代码。

为了让程序知道什么时候发生了事件,我们需要给它设置一些“监听器”。可以把监听器想象成一个守门员,它一直在关注着某个特定的动作,比如用户点击按钮。当这个动作发生时,守门员就会通知程序去执行相应的操作。

总之,事件和监听器的结合让我们的程序能够对用户的操作做出反应,增强了用户体验。

fname = "feed.txt"
feed = open(fname, 'r')

num_lines = len(feed.splitlines())
num_words = 0
num_chars = 0

for line in lines:
    num_words += len(line.split())
3

这里有一些可能对你有帮助的函数:

  • open("file").read() 这个函数可以一次性读取整个文件的内容。
  • 'string'.splitlines() 这个函数可以把字符串按行分开(并且会忽略空行)。

通过使用 len() 和这些函数,你可以完成你想做的事情。

26

试试这个:

fname = "feed.txt"

num_lines = 0
num_words = 0
num_chars = 0

with open(fname, 'r') as f:
    for line in f:
        words = line.split()

        num_lines += 1
        num_words += len(words)
        num_chars += len(line)

回到你的代码:

fname = "feed.txt"
fname = open('feed.txt', 'r')

这样做有什么意义呢?fname 最开始是一个字符串,后来又变成了一个文件对象。你其实并没有用到第一行定义的那个字符串,而且一个变量应该只用来表示一种东西:要么是字符串,要么是文件对象。

for line in feed:
    lines = line.split('\n')

line 是从文件中读取的一行内容。把它用 split('\n') 分开是没有意义的。

撰写回答