2024-09-21 02:51:59 发布
网友
输入文件:a.txt
a.txt
aaaaaaaaaaaa bbbbbbbbbbb cccccccccccc
python代码:
with open("a.txt") as f: for line in f: print line
问题是:
[root@a1 0]# python read_lines.wsgi aaaaaaaaaaaa bbbbbbbbbbb cccccccccccc
如您所见,输出在每个项之间有额外的行。
如何预防?
结果是,每一行在末尾都是一个换行符,python中的print语句也添加了一个换行符。您可以删除换行符:
print
with open("a.txt") as f: for line in f: print line.strip()
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(…, 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新行文件,或者一个本地到任何平台的I'm-running-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.write(line)写入sys.stdout来完成此操作,但也可以从print本身完成此操作。
sys.stdout.write(line)
sys.stdout
如果您只是在print语句的末尾添加逗号,而不是打印换行符,那么它会添加一个“智能空间”。Exactly what that means有点棘手,但它的想法应该是在应该的时候添加一个空格,而在不应该的时候则不添加任何空格。与大多数DWIM算法一样,它并不总是正确的,但在这种情况下,它确实:
with open("a.txt") as f: for line in f: print line,
当然,我们现在假设文件的换行符与终端的换行符相匹配——如果您在Unix终端上尝试使用经典Mac文件,那么最后一行的每一行都会打印出来。同样,您可以使用通用换行符来解决这个问题。
无论如何,您可以使用print函数而不是print语句来避免智能空间的DWIM魔力。在Python2.x中,可以通过使用__future__声明来实现:
__future__
from __future__ import print_function with open("a.txt") as f: for line in f: print(line, end='')
或者您可以使用第三方包装库,如six,如果您愿意的话。
six
结果是,每一行在末尾都是一个换行符,python中的
print
语句也添加了一个换行符。您可以删除换行符:print
追加一个换行符,并且输入行已经以换行符结束。标准解决方案是逐字输出输入行:
PS:对于Python 3(或带有print函数的Python 2),abarnert的
print(…, end='')
解决方案是最简单的。正如其他答案所解释的,每一行都有一个新行;当您
print
一个空字符串时,它会在末尾添加一行。有两种方法可以解决这个问题;其他的都是同一个想法的变体。首先,你可以在读的时候去掉这些新行:
这将删除任何其他尾随空白,如空格或制表符,以及换行符。通常你不在乎这个。如果这样做了,您可能需要使用通用换行模式,并删除换行符:
但是,如果您知道文本文件将是,比方说,一个Windows新行文件,或者一个本地到任何平台的I'm-running-on-right-now-newline文件,您可以显式地除去适当的结尾:
另一种方法是保留原始换行符,避免打印多余的换行符。虽然可以通过使用
sys.stdout.write(line)
写入sys.stdout
来完成此操作,但也可以从print
本身完成此操作。如果您只是在
print
语句的末尾添加逗号,而不是打印换行符,那么它会添加一个“智能空间”。Exactly what that means有点棘手,但它的想法应该是在应该的时候添加一个空格,而在不应该的时候则不添加任何空格。与大多数DWIM算法一样,它并不总是正确的,但在这种情况下,它确实:当然,我们现在假设文件的换行符与终端的换行符相匹配——如果您在Unix终端上尝试使用经典Mac文件,那么最后一行的每一行都会打印出来。同样,您可以使用通用换行符来解决这个问题。
无论如何,您可以使用print函数而不是print语句来避免智能空间的DWIM魔力。在Python2.x中,可以通过使用
__future__
声明来实现:或者您可以使用第三方包装库,如
six
,如果您愿意的话。相关问题 更多 >
编程相关推荐