Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个计算文本文件(Python)行中单词数的程序_Python_Input_Output_Counter - Fatal编程技术网

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

创建一个计算文本文件(Python)行中单词数的程序,python,input,output,counter,Python,Input,Output,Counter,我正在尝试创建一个程序,它接收一个输入文件,计算每行的字数,并将该数字的字符串写入另一个输出文件。我成功地开发了以下代码: 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("

我正在尝试创建一个程序,它接收一个输入文件,计算每行的字数,并将该数字的字符串写入另一个输出文件。我成功地开发了以下代码:

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行中打开的所有文件都将关闭


您看到这种行为的原因是,出于性能原因,对文件的读写是缓冲的。由于硬盘驱动器的构造方式,数据是以块而不是单个字节的形式读/写的——因此,即使尝试读/写单个字节,也必须读/写整个块。因此,大多数编程语言的内置文件IO函数实际上一次至少读取一个块到内存中,并将该内存块中的数据提供给您,直到它需要读取另一个块为止。类似地,写入是通过首先实际写入内存块,并且仅在内存块已满时才将其写入磁盘来执行的。如果不关闭文件写入器,则不会写入内存中最后一个块中的任何内容。

我曾尝试使用with函数,使用的是您提供的不同结构,但没有任何更改。好吧,我再次尝试复制您的代码,结果成功了。首先,非常感谢,第二,你知道为什么8381行中的前6880行代码可以工作吗?我就是看不出问题所在。即使关闭或不关闭文件…请参阅我的更新。根据行的大小和Python的缓冲区大小,最后1501行正好留在缓冲区中。尝试使用包含较短或较长行的文件,您会看到不同数量的省略行。