我正在尝试创建一个程序,它接受一个输入文件,计算每一行中的单词数,并将该特定数字的字符串写入另一个输出文件中。我设法开发了这段代码:
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,将显示(所有数字都是圆形,右边)。 我尝试创建另一个程序,将每行分成一个列表,然后计算它的长度,但问题仍然是一样的。 知道是什么原因造成的吗?
答案 0 :(得分:0)
完成后,您需要关闭每个文件。最安全的方法是使用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
行中打开的所有文件都将被关闭。
您看到的行为的原因是出于性能原因,读取和写入文件是缓冲。由于构造硬盘驱动器的方式,数据是以块而不是单个字节读/写的 - 因此即使您尝试读/写单个字节,也必须读/写整个块。因此,大多数编程语言的内置文件IO函数实际上一次读取(至少)一个块到内存中,并从内存块中提供数据,直到需要读取另一个块。类似地,首先通过实际写入存储块来执行写入,并且仅在块满时将块写入磁盘。如果不关闭文件编写器,则不会写入最后一个内存块中的任何内容。