这真的很奇怪。
我有一个文件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
为了记录,我改变了脚本以将线条打印到控制台,它做得很好。问题似乎是将这些行写入文件。任何帮助将不胜感激。
答案 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')
现在你不必担心关闭任何文件。