在python文件中插入奇怪的换行符

时间:2012-07-02 21:33:43

标签: python file fwrite

有没有人知道或知道python奇怪地插入换行符的任何情况。

这是我的一段代码

  if ((sentAnalyze) and len(OpString)!=0):
    if data[8]!= '':
        if (data[8] == 'p'):
            OpString = "1 " + OpString
        elif (data[8] == 'n'):
            OpString = "-1 " + OpString
        elif (data[8] == 'neu'):
            OpString = "0 " + OpString
        print "writing :", OpString
        fw.write(OpString + "\n")

当我尝试查看打印命令和文件写入命令时,在文件中为某些行号插入了一条额外的新行。

整个if块在while循环中,print命令正确打印行。

是的我以w+模式打开文件。

用于计算OpString的函数(部分写入此处)

 for word,tag in simplified_tokens:
                tok = word + "/" + tag
                if tok in self.wordtoPosition:
                    OpString = OpString+ " " + str(self.wordtoPosition[tok]) + ":1" #+ str(1.0 / self.uniqPOSHash[tok])
return OpString

数据看起来像

1981:1 503:1 21:1 58:1 159:1 1:1 87:1 412:1 105:1 478:1 1154:1 1023:1 1192:1 53:1 37:1 36:1 598:1 19:1 4:1 162:1 14:1 131:1 2:1 489:1 411:1 3:1 165:1 370:1


-17:1 614:1 6:1 631:1 59:1 1:1 0:1 1183:1 10:1 22:1 15:1 67:1 55:1 3:1 175:1 9:1 43:1 866:1 48:1 30:1 0:1 484:1 2:1 1106:1 109:1

注意之间的额外换行符。只发生在某些地方。

repr(OpString)显示

'1981:1 503:1 21:1 58:1 159:1 1:1 87:1 412:1 105:1 478:1 1154:1 1023:1 1192:1 53:1 37:1 36:1 598:1 19:1 4:1 162:1 14:1 131:1 2:1 489:1 411:1 3:1 165:1 370:1'
'-17:1 614:1 6:1 631:1 59:1 1:1 0:1 1183:1 10:1 22:1 15:1 67:1 55:1 3:1 175:1 9:1 43:1 866:1 48:1 30:1 0:1 484:1 2:1 1106:1 109:1'

请注意。当我写入某些行的文件时,删除“\ n”仍会添加一行。这很奇怪

另一个有趣的观察。在上面的方法中,我正在从一个文件中读取并写入另一个文件。 sO我打开了2个文件句柄。 fr用于文件读取,fw用于文件写入。如果我只是打开fr,构建整个OpString变量,关闭fr然后用fw写它,我不会得到奇怪的新行。非常有趣!

1 个答案:

答案 0 :(得分:3)

我们真的必须看到您正在使用的输入数据..同时,您可以尝试

fw.write(Opstring.strip() + '\n')

strip()会在明确附加write之前删除原始数据中的任何差事换行符。

我怀疑至少有一些OpString已经有一个尾随换行符。

这不是修复,而是诊断。一旦确定这是问题的根源,那么更好的方法是消除原点/读取时的差事换行符。

更新

更好的是,做一个

 Opstring = Opstring.strip()

按照@ kindall的有用评论

输入if - 语句之前