<p>正如其他答案所解释的,每一行都有一个新行;当您<code>print</code>一个空字符串时,它会在末尾添加一行。有两种方法可以解决这个问题;其他的都是同一个想法的变体。</p>
<hr/>
<p>首先,你可以在读的时候去掉这些新行:</p>
<pre><code>with open("a.txt") as f:
for line in f:
print line.rstrip()
</code></pre>
<p>这将删除任何其他尾随空白,如空格或制表符,以及换行符。通常你不在乎这个。如果这样做了,您可能需要使用通用换行模式,并删除换行符:</p>
<pre><code>with open("a.txt", "rU") as f:
for line in f:
print line.rstrip('\n')
</code></pre>
<p>但是,如果您知道文本文件将是,比方说,一个Windows新行文件,或者一个本地到任何平台的I'm-running-on-right-now-newline文件,您可以显式地除去适当的结尾:</p>
<pre><code>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)
</code></pre>
<hr/>
<p>另一种方法是保留原始换行符,避免打印多余的换行符。虽然可以通过使用<code>sys.stdout.write(line)</code>写入<code>sys.stdout</code>来完成此操作,但也可以从<code>print</code>本身完成此操作。</p>
<p>如果您只是在<code>print</code>语句的末尾添加逗号,而不是打印换行符,那么它会添加一个“智能空间”。<a href="http://docs.python.org/2/reference/simple_stmts.html#the-print-statement" rel="noreferrer">Exactly what that means</a>有点棘手,但它的想法应该是在应该的时候添加一个空格,而在不应该的时候则不添加任何空格。与大多数DWIM算法一样,它并不总是正确的,但在这种情况下,它确实:</p>
<pre><code>with open("a.txt") as f:
for line in f:
print line,
</code></pre>
<p>当然,我们现在假设文件的换行符与终端的换行符相匹配——如果您在Unix终端上尝试使用经典Mac文件,那么最后一行的每一行都会打印出来。同样,您可以使用通用换行符来解决这个问题。</p>
<p>无论如何,您可以使用print函数而不是print语句来避免智能空间的DWIM魔力。在Python2.x中,可以通过使用<code>__future__</code>声明来实现:</p>
<pre><code>from __future__ import print_function
with open("a.txt") as f:
for line in f:
print(line, end='')
</code></pre>
<p>或者您可以使用第三方包装库,如<code>six</code>,如果您愿意的话。</p>