2017-09-17 69 views
-2

我有一行(在文本文件中)要在终端打印的行列表。这是我喜欢的格式(无印刷线之间的空行):打印多行,行间无空格

>>> print("line \n" * 5) 
line 
line 
line 
line 
line 

这是它的外观(与文本行,一个空行,等等):

>>> for x in range(0, 5): print "line \n" 
... 
line 

line 

line 

line 

line 

任何想法为什么它以这种方式工作以及如何在它们之间没有空行的情况下打印我的行列表?

UPDATE(这是我想摆脱的空行):

with open(FILE, 'r') as f: 
    lines = f.readlines() 
    for line in lines: 
     print line 

回答

1

这实际上是由于您阅读文件的方式。如果你已经做了一些类似

with open(FILE) as f: 
    data = f.readlines() 

然后data将保留换行符结束行的列表。如果你不想行字符的末尾,而不是使用:

with open(FILE) as f: 
    data = f.read().splitlines() 

如果你不想改变你将数据读入一个列表的方式,然后串联并打印这样的线而不是:

print ''.join(data) 

要回答的文字问题,如果你有一个换行符的字符串,而要抑制由打印语句生成的新行,这样做在Python 2的方法是使用一个尾随逗号打印说明:

with open(FILE) as f: 
    for line in f: 
     print line, 

但是请注意,这并不是真的有必要像这样逐行重复。你可能也只是直接打印数据:

with open(FILE) as f: 
    print f.read() 
+0

尽管这样做sol对于OP的问题,我必须指出它不能回答上述问题 - 如何不以字符结尾的字符串打印额外的换行符。 – Todor

+1

@Todor添加了解决字面问题的答案的最后一节。 – wim

1

当使用一个for循环,你可以删除 “\ n” 如下

for x in range(0, 5): print "line" 
1

打印命令隐式地在输出显示中添加新的换行\n。删除\n以避免在循环结构中打印空行。

1

print默认添加一个尾随换行符。

from __future__ import print_function # only needed for python 2 
print("string", end="") 
0

标准调用打印功能会自动添加一个换行符,所以你可以从你现有的线(S),删除\n如果线来自外部文件:可以按如下方式禁用它使用line.strip(),或者告诉打印已不能与添加新行:print(line, end='')

这将为Python3工作或2.7与from __future__ import print_function为第一行代码。

1

默认情况下print增加了一个新行,和你的字符串也有它;你有两种可能的解决方案。

要么覆盖此行为,设置字符串被投入到空:

# python 3.* 
for x in range(0, 5): print("line \n", end="") 

而且

# python 2.* 
from __future__ import print_function # to use py3 print in py2 
for x in range(0, 5): print("line \n", end="") 

另外,如果你没有过线完全控制 - 有些人可能有新行,其他 - 不,修剪任何换行符结尾,并保留默认行为:

for x in range(0, 5): print("line \n".rstrip("\n").rstrip("\r")) # takes care of also Windows line ending, just in case