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

时间:2013-08-09 06:07:11

标签: 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    

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

1
1
1
2
1
.
.
.

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

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

它适用于前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   

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

甚至可以确认,foo.close()或close()。解决了这个问题..

答案 2 :(得分:0)

你也可以这样做

with open('temp.txt') as initial:
    with open('classes.txt','w') as final:
        for line in initial:
            final.write(list(line.rsplit(':',1)[1])[0]+'\n')

现在你不必担心关闭任何文件。