抑制file.write中的换行

7 投票
4 回答
56482 浏览
提问于 2025-04-15 16:34

在写文本文件的时候,有些地方用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

我漏掉了什么呢?

更新

我应该从代码在StackOverflow上粘贴的方式中得到一些提示。最后一行中,出于某种原因,混合了空格和制表符,这样在TextMate中看起来视觉上似乎在“for word...”循环之外,但解释器却把它当作这个循环的一部分。把空格转换成制表符解决了这个问题。

谢谢你的建议。

4 个回答

1

你在每个单词后面都写了换行:

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

你看到的这些换行是这样的吗,还是还有其他的换行呢?

1

你可能需要对每个 wc[word] 使用一下 strip() 方法。打印出 wc 中的一个项目,可能就能帮你判断这些项目中是否已经有换行符,这可能是导致这个问题的原因。

另外,可能是你最后的 out.write("\n") 的缩进没有达到你想要的效果。

14

file.write() 这个方法在你写入的字符串里没有包含任何 \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") 的缩进写得太多了???

撰写回答