6

テキスト ファイルに書き込む場合、出力ファイルで file.write インスタンスの一部の後に改行が続きますが、そうでないインスタンスもあります。改行するように指示する場所以外では、改行はしたくありません。コード:

    for doc,wc in wordcounts.items(): 
        out.write(doc)             #this works fine, no linebreak
        for word in wordlist: 
            if word in wc: out.write("\t%d" % wc[word]) #linebreaks appear
            else: out.write("\t0")                      #after each of these
        out.write("\n")        #this line had mixed spaces/tabs

私は何が欠けていますか?

アップデート

コードがSOにどのように貼り付けられたかから手がかりを得たはずです。何らかの理由で、最終行にスペースとタブが混在していたため、TextMate では「for word...」ループの外側に視覚的に表示されていましたが、インタープリターはそれをそのループの一部として扱っていました。スペースをタブに変換すると問題が解決しました。

ご意見ありがとうございます。

4

4 に答える 4

13

file.write()書き込み文字列に s が含まれていない場合、改行は追加されません\n

しかし、 を使用して、単語リスト内の各単語に改行を強制しますがout.write("\n")、それはあなたが望むものですか?

    for doc,wc in wordcounts.items(): 
        out.write(doc)             #this works fine, no linebreak
        for word in wordlist: 
            if word in wc: out.write("\t%d" % wc[word]) #linebreaks appear
            else: out.write("\t0")                      #after each of these
            out.write("\n") #<--- NEWLINE ON EACH ITERATION!

インデントしout.write("\n")すぎたのかな???

于 2009-12-01T14:14:24.473 に答える
1

すべての単語の後に改行を書きます。

for word in wordlist:
    ...
    out.write("\n")

これらはあなたが見ている改行ですか、それとも他にもありますか?

于 2009-12-01T14:13:10.450 に答える
1

strip()それぞれに対して を実行する必要がある場合がありますwc[word]。から単一のアイテムを印刷することwcは、おそらく、この動作を引き起こしているアイテムに既に改行があるかどうかを判断するのに十分でしょう。

それまたは最終的なインデントのいずれかが、out.write("\n")意図したとおりに機能していません。

于 2009-12-01T14:19:45.710 に答える
0

あなたのインデントは間違っていると思います。

(また、if句を冗長にし、コードをより読みやすくするために自由を取りました:)

for doc,wc in wordcounts.items()
   out.write(doc)
   for word in wordlist:
     out.write("\t%d" % wc.get(word,0))
   out.write("\n")
于 2009-12-01T14:21:19.420 に答える