Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在循环内打印时输出中的额外行_Python - Fatal编程技术网

Python 在循环内打印时输出中的额外行

Python 在循环内打印时输出中的额外行,python,Python,我不明白为什么代码#1会返回额外的空行,而代码#2不会。有人能解释一下吗?不同之处在于代码#2末尾额外加了一个逗号 代码#1的结果: 代码#2的结果(期望结果): print语句中的尾随,将超过换行。第一个打印语句没有,第二个打印语句有 您读取的输入仍然包含导致额外换行的\n。一种补偿方法是通过使用尾随逗号防止打印发出自己的换行符。或者,也可以说是一种更好的方法,您可以在读取输入时去掉输入中的换行符(例如,通过使用rstrip())在文件上迭代可以保留文件中的换行符。因此,有一个新行来自你的打印

我不明白为什么代码#1会返回额外的空行,而代码#2不会。有人能解释一下吗?不同之处在于代码#2末尾额外加了一个逗号

代码#1的结果:

代码#2的结果(期望结果):


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())