有没有人知道或知道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写它,我不会得到奇怪的新行。非常有趣!
答案 0 :(得分:3)
我们真的必须看到您正在使用的输入数据..同时,您可以尝试
fw.write(Opstring.strip() + '\n')
strip()
会在明确附加write
之前删除原始数据中的任何差事换行符。
我怀疑至少有一些OpString
已经有一个尾随换行符。
这不是修复,而是诊断。一旦确定这是问题的根源,那么更好的方法是消除原点/读取时的差事换行符。
更新:
更好的是,做一个
Opstring = Opstring.strip()
按照@ kindall的有用评论
输入if
- 语句之前