Python正在向outpu添加额外的换行符

2024-09-21 02:51:59 发布

您现在位置:Python中文网/ 问答频道 /正文

输入文件:a.txt

aaaaaaaaaaaa
bbbbbbbbbbb
cccccccccccc

python代码:

with open("a.txt") as f:
    for line in f:
        print line

问题是:

[root@a1 0]# python read_lines.wsgi
aaaaaaaaaaaa

bbbbbbbbbbb

cccccccccccc

如您所见,输出在每个项之间有额外的行。

如何预防?


Tags: 文件代码intxtfora1aswith
3条回答

结果是,每一行在末尾都是一个换行符,python中的print语句也添加了一个换行符。您可以删除换行符:

with open("a.txt") as f:
    for line in f:
        print line.strip()

print追加一个换行符,并且输入行已经以换行符结束。

标准解决方案是逐字输出输入行:

import sys

with open("a.txt") as f:
    for line in f:
        sys.stdout.write(line)

PS:对于Python 3(或带有print函数的Python 2),abarnert的print(…, end='')解决方案是最简单的。

正如其他答案所解释的,每一行都有一个新行;当您print一个空字符串时,它会在末尾添加一行。有两种方法可以解决这个问题;其他的都是同一个想法的变体。


首先,你可以在读的时候去掉这些新行:

with open("a.txt") as f:
    for line in f:
        print line.rstrip()

这将删除任何其他尾随空白,如空格或制表符,以及换行符。通常你不在乎这个。如果这样做了,您可能需要使用通用换行模式,并删除换行符:

with open("a.txt", "rU") as f:
    for line in f:
        print line.rstrip('\n')

但是,如果您知道文本文件将是,比方说,一个Windows新行文件,或者一个本地到任何平台的I'm-running-on-right-now-newline文件,您可以显式地除去适当的结尾:

with open("a.txt") as f:
    for line in f:
        print line.rstrip('\r\n')

with open("a.txt") as f:
    for line in f:
        print line.rstrip(os.linesep)

另一种方法是保留原始换行符,避免打印多余的换行符。虽然可以通过使用sys.stdout.write(line)写入sys.stdout来完成此操作,但也可以从print本身完成此操作。

如果您只是在print语句的末尾添加逗号,而不是打印换行符,那么它会添加一个“智能空间”。Exactly what that means有点棘手,但它的想法应该是在应该的时候添加一个空格,而在不应该的时候则不添加任何空格。与大多数DWIM算法一样,它并不总是正确的,但在这种情况下,它确实:

with open("a.txt") as f:
    for line in f:
        print line,

当然,我们现在假设文件的换行符与终端的换行符相匹配——如果您在Unix终端上尝试使用经典Mac文件,那么最后一行的每一行都会打印出来。同样,您可以使用通用换行符来解决这个问题。

无论如何,您可以使用print函数而不是print语句来避免智能空间的DWIM魔力。在Python2.x中,可以通过使用__future__声明来实现:

from __future__ import print_function
with open("a.txt") as f:
    for line in f:
        print(line, end='')

或者您可以使用第三方包装库,如six,如果您愿意的话。

相关问题 更多 >

    热门问题