3

这真的很奇怪。我有一个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 文件中,并在该文件上运行脚本,但结果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   

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

4

3 回答 3

6

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

于 2013-08-09T06:38:48.747 回答
1

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

于 2015-05-06T14:51:06.287 回答
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')

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

于 2018-04-23T05:08:38.107 回答