Python 在循环内打印时输出中的额外行
我不明白为什么代码#1会返回额外的空行,而代码#2不会。有人能解释一下吗?不同之处在于代码#2末尾额外加了一个逗号 代码#1的结果: 代码#2的结果(期望结果):Python 在循环内打印时输出中的额外行,python,Python,我不明白为什么代码#1会返回额外的空行,而代码#2不会。有人能解释一下吗?不同之处在于代码#2末尾额外加了一个逗号 代码#1的结果: 代码#2的结果(期望结果): print语句中的尾随,将超过换行。第一个打印语句没有,第二个打印语句有 您读取的输入仍然包含导致额外换行的\n。一种补偿方法是通过使用尾随逗号防止打印发出自己的换行符。或者,也可以说是一种更好的方法,您可以在读取输入时去掉输入中的换行符(例如,通过使用rstrip())在文件上迭代可以保留文件中的换行符。因此,有一个新行来自你的打印
print语句中的尾随
,
将超过换行。第一个打印语句没有,第二个打印语句有
您读取的输入仍然包含导致额外换行的
\n
。一种补偿方法是通过使用尾随逗号防止打印发出自己的换行符。或者,也可以说是一种更好的方法,您可以在读取输入时去掉输入中的换行符(例如,通过使用rstrip()
)在文件上迭代可以保留文件中的换行符。因此,有一个新行来自你的打印,一个来自字符串
测试文件语义的一个好方法是使用StringIO
。看一看:
>>> from StringIO import StringIO
>>> x = StringIO("abc\ncde\n")
>>> for line in x: print repr(line)
...
'abc\n'
'cde\n'
正如Levon所说,逗号会抑制打印中的换行符,因此只有字符串中的换行符
我使用
s.rstrip('\n')
从字符串中剥离换行符。它消除了任何现代格式(Unix、Windows或旧的Mac OS)的任何后续换行符。因此,您可以改为执行打印“(%d)%s%”(i,text.rstrip('\n'))
。为了不出现空行,您需要在print语句末尾添加,
例如:
for i in range(10):
print i,
>>>0 1 2 3 4 5 6 7 8 9
for i in range(10):
print i
>>>
0
1
2
3
4
5
6
7
8
9
对于这个问题,最好的常规答案是在阅读后立即删除尾随的换行符(如果有!):
f = open('tasks.txt')
for i, text in enumerate(f, start=1):
text = text.rstrip('\n')
if i >= 2 and i <= 4:
print "(%d) %s" % (i, text)
f=open('tasks.txt')
对于i,枚举中的文本(f,start=1):
text=text.rstrip('\n')
如果i>=2且i有一个非常简单的解决方法
假设为了参数起见,我有一个.txt文件(称为numbers.txt),我从中读取该文件的值:
234234
777776
768768
然后,使用以下代码:
filename = numbers.txt
with open(filename) as file_object:
for line in file_object:
print(line)
会给你额外的空白行,因为你有问题。但是,只需做一点小小的更改,就可以使用rstrip()方法除去多余的空行。因此,代码变成:
filename = numbers.txt
with open(filename) as file_object:
for line in file_object:
print(line.rstrip())
现在,你将得到你的结果,它们之间没有那些恼人的空白行 谢谢,我不知道。我只是查了一下。看起来Python3.0包含了一些即将发布的附加功能。如果我理解正确,您可以定义如何在Python 3.0+中结束您的行。谢谢你指出错误,是的,我是说代码2。修复。@Jaro您是对的,文档中的部分指出了Python2.x和3.x之间打印的相关区别。,end='
与Python3-1如果(您应该)以文本模式打开文件,行分隔符将更改为'\n'
,因此您只需要.rstrip('\n')
。如果在您的行末尾留下一个'\r'
,则该'\r'
是您的数据的一部分,可能是由于文件的制作者有些混乱。@John您错了。在Windows上,行分隔符从“\r\n”更改为“\n”,但在Unix上不更改。也就是说:如果我们按照您的建议操作,相同的文件在不同的操作系统上的行为会有所不同。也许这是我们想要的,但不是你说的。但是,如果我们用“rU”来读,它们读的是相同的,那么就没有必要去掉“\r”。@DevinJeanpierre:如果您没有使用rU
,您希望行被os隔开。linesep
和\r'不应该被悄悄地冲走。如果使用
rU,则不需要剥离
\r`。因此:在这两种情况下,\r
不应该出现。在python3中,范围(10):print(i,end=”“)中的i将是
f = open('tasks.txt')
for i, text in enumerate(f, start=1):
text = text.rstrip('\n')
if i >= 2 and i <= 4:
print "(%d) %s" % (i, text)
234234
777776
768768
filename = numbers.txt
with open(filename) as file_object:
for line in file_object:
print(line)
filename = numbers.txt
with open(filename) as file_object:
for line in file_object:
print(line.rstrip())