输入文件:a.txt
aaaaaaaaaaaa
bbbbbbbbbbb
cccccccccccc
蟒蛇代码:
with open("a.txt") as f:
for line in f:
print line
问题:
aaaaaaaaaaaa
bbbbbbbbbbb
cccccccccccc
如您所见,输出在每个项目之间都有额外的行。
如何防止这种情况?
输入文件:a.txt
aaaaaaaaaaaa
bbbbbbbbbbb
cccccccccccc
蟒蛇代码:
with open("a.txt") as f:
for line in f:
print line
问题:
aaaaaaaaaaaa
bbbbbbbbbbb
cccccccccccc
如您所见,输出在每个项目之间都有额外的行。
如何防止这种情况?
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 换行文件,或者一个本地到任何平台的本地文件,我正在运行-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
with sys.stdout.write(line)
,你也可以从print
它自己来做到这一点。
如果您只是在print
语句的末尾添加一个逗号,而不是打印换行符,它会添加一个“智能空格”。这究竟意味着什么有点棘手,但这个想法应该是它应该添加一个空格,而不应该添加一个空格。像大多数 DWIM 算法一样,它并不总能把事情做对——但在这种情况下,它确实:
with open("a.txt") as f:
for line in f:
print line,
当然,我们现在假设文件的换行符与您的终端匹配——如果您在 Unix 终端上尝试使用经典的 Mac 文件,您最终会得到每一行都打印在最后一行之上。同样,您可以通过使用通用换行符来解决这个问题。
无论如何,您可以通过使用 print 函数而不是 print 语句来避免智能空间的 DWIM 魔法。在 Python 2.x 中,您可以通过使用__future__
声明来获得它:
from __future__ import print_function
with open("a.txt") as f:
for line in f:
print(line, end='')
six
或者,如果您愿意,也可以使用第三方包装库,如 。
发生的情况是,每行末尾都有一个换行符,print
python 中的语句也添加了一个换行符。您可以删除换行符:
with open("a.txt") as f:
for line in f:
print line.strip()
您也可以尝试该splitlines()
功能,它会自动剥离:
f = open('a.txt').read()
for l in f.splitlines():
print l
它不是添加换行符,而是文件中的每一扫描行都有一个尾随。
尝试:
with open ("a.txt") as f:
for line in (x.rstrip ('\n') for x in f):
print line