Python没有明显的原因停止写入文件

Stu*_*der 2 python file

这真的很奇怪.我有一个temp.txt具有以下格式的文件:

   1        1:1        1:1         *0.9    0      0      0.1    0      0    
   2        1:1        1:1         *1      0      0      0      0      0    
   3        1:1        1:1         *1      0      0      0      0      0    
   4        1:1        2:2      +   0.2   *0.7    0.1    0      0      0    
   5        1:1        1:1         *1      0      0      0      0      0    
   6        1:1        1:1         *0.9    0      0      0.1    0      0    
   7        1:1        1:1         *1      0      0      0      0      0    
   8        1:1        1:1         *1      0      0      0      0      0    
   .        .          .           .       .      .      .      .      .
   .        .          .           .       .      .      .      .      .
   .        .          .           .       .      .      .      .      .
6593        1:1        1:1         *1      0      0      0      0      0    
Run Code Online (Sandbox Code Playgroud)

数字本身的含义并不重要(如果有人好奇,那就是WEKA输出).我想要的是将每行第二个冒号右侧的数字放入一个单独的文件中classes.txt,每个数字一行,如下所示:

1
1
1
2
1
.
.
.
Run Code Online (Sandbox Code Playgroud)

我编写了以下Python脚本来完成此任务:

initial = open('temp.txt')
final = open('classes.txt','w')
for line in initial:
    final.write(list(line.rsplit(':',1)[1])[0]+'\n') 
Run Code Online (Sandbox Code Playgroud)

它适用于前5462线,但没有明显的理由它停在那里.其余1131行(5463 - 6593)的数字不存在classes.txt.我将跳过的行复制并粘贴到一个单独的txt文件中,然后在THAT文件上运行脚本,但结果classes.txt为空.

这个问题真的让我感到困惑,因为我看不到第5462和5463行之间没有明显区别,如下所示:

5461        1:1        1:1         *1      0      0      0      0      0    
5462        1:1        1:1         *1      0      0      0      0      0    
5463        1:1        4:4      +   0.3    0      0     *0.6    0.1    0    
5464        1:1        1:1         *0.8    0      0      0.2    0      0   
Run Code Online (Sandbox Code Playgroud)

为了记录,我改变了脚本以将行打印到控制台,它做得很好.问题似乎是将这些行写入文件.任何帮助将不胜感激.

Stu*_*der 5

我发现了发生了什么!我仍然不能100%确定为什么这个问题解决了(以及为什么问题专门出现在第5462行)但我添加final.close()到脚本的末尾然后它完美地写了所有6593个数字.奇怪.

  • 我的假设是它是一个缓冲问题.您写入文件的所有内容都是通过缓冲区写入的,并且在该缓冲区被确定为满之前不会在文件中结束(不完全正确,但您可以这样想).在处理文件时,你应该使用`with`语句,它自动处理`file.close`-调用. (4认同)
  • 这似乎并不奇怪,这种行为在未关闭的文件中被广泛观察到,[见这里](http://stackoverflow.com/questions/3167494/how-often-does-python-flush-to-a-file)并尝试使用`with ... as ...`构造. (4认同)
  • @msvalkon jinx! (2认同)