创建一个计算文本文件一行中单词数的程序 (Python)

Creating a program which counts words number in a row of a text file (Python)

我正在尝试创建一个程序,它接受一个输入文件,计算每行中的单词数,然后在另一个输出文件中写入该特定数字的字符串。我设法开发了这段代码:

in_file = "our_input.txt"
out_file = "output.txt"
f=open(in_file)
g=open(out_file,"w")
for line in f:
    if line == "\n":
        g.write("0\n")
    else:
        g.write(str(line.count(" ")+1)+"\n")

现在,这很有效,但问题是它只适用于一定数量的行。如果我的输入文件有 8000 行,它将只显示前 6800 行。如果有 6000 行,则将显示(所有数字都四舍五入,对)。 我尝试创建另一个程序,将每一行拆分为一个列表,然后计算它的长度,但问题仍然存在。 知道是什么原因造成的吗?

您需要在完成每个文件后将其关闭。最安全的方法是使用 with 语句:

with open(in_file) as f, open(out_file,"w") as g:
    for line in f:
        if line == "\n":
            g.write("0\n")
        else:
            g.write(str(line.count(" ")+1)+"\n")

当到达 with 块的末尾时,您在 with 行中打开的所有文件都将关闭。

您看到的行为的原因是出于性能原因,读取和写入 to/from 文件是 缓冲的 。由于硬盘驱动器的构造方式,数据 read/written 以块而不是单个字节为单位 - 因此即使您尝试 read/write 单个字节,也必须 read/write 整个块.因此,大多数编程语言的内置文件 IO 函数实际上一次(至少)读取一个块到内存中,并从该内存块中为您提供数据,直到它需要读取另一个块。类似地,写入是通过首先实际写入内存块来执行的,只有当块已满时才将其写入磁盘。如果不关闭文件写入器,则不会写入最后一个内存块中的内容。