0

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」を削除しても、特定の行のファイルに書き込んでいるときに1行が追加されます。それは変です

もう一つの興味深い観察。上記のアプローチでは、ファイルから読み取り、別のファイルに書き込みます。sO2つのファイルハンドルを開いています。ファイルの読み取りにはfr、ファイルの書き込みにはfw。frを開いて、OpString変数全体を作成し、frを閉じてから、fwを使用して書き込む場合、奇妙な新しい行は表示されません。とても興味深い!

4

1 に答える 1

3

作業している入力データを実際に確認する必要があります..それまでの間、試していただけますか

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

strip()用に明示的に改行を追加する前に、元のデータから必要な改行を取り除きますwrite

あなたOpStringの の少なくともいくつかには、すでに末尾の改行があると思います。

これは修正ではなく、診断です。これが問題の原因であると判断したら、より良いアプローチは、原点で/それらを読むときに使い慣れた改行を削除することです。

更新

さらに良いことに、

 Opstring = Opstring.strip()

if@kindall の有益なコメントに従って -statementを入力する前に

于 2012-07-02T21:35:14.930 に答える