file.readlines会留下空行

13

我了解到file.readlines会一次读取整个文件并将其按行存储到一个列表中。如果我有一个这样的文件 -

Sentence 1
Sentence 2
Sentence 3

我使用 readlines 将每个句子打印出来,如下所示 -

file = open("test.txt") 
for i in file.readlines():
    print i

输出为

Sentence 1

Sentence 2

Sentence 3

我想问的是,为什么每个句子之间都有额外的空行,如何去掉它?

更新

我发现使用 i.strip 也可以移除多余的空行。为什么会这样呢?据我所知,split 只会移除字符串开头和结尾处的空格。

5个回答

11

file.readlines() 返回一个字符串列表。每个字符串包含换行符。 print 语句会打印传递的参数并添加换行符;这就是为什么会得到额外的空行。

要删除额外的换行符,请使用str.rstrip

print i.rstrip('\n')

或者使用sys.stdout.write
sys.stdout.write(i)

顺便提一下,除非你需要一次性读取所有行,否则不要使用file.readlines。只需遍历文件即可。

with open("test.txt") as f:
    for i in f:
        print i.rstrip('\n')
        ...

更新

在Python 3中,为了防止print输出末尾的换行符,您可以使用print(i, end='')

在Python 2中,如果您执行以下操作,则可以使用相同的功能:from __future__ import print_function

回答更新

制表符、换行符也被视为空格。

>> ' \r\n\t\v'.isspace()
True

...然后你的打印命令加了第二个换行符,我猜。 - James Sefton
rstrip("\n") 因为文件以文本模式打开,所以足矣。 - Tim Pietzcker
@TimPietzcker,你说得对。我根据你的评论编辑了答案。谢谢。 - falsetru
如果 OP 使用的是 Python 3,请使用 print(i, end='');如果使用的是 Python 2.x,则需要使用 from __future__ import print_function - Burhan Khalid
你为什么要使用 rstrip("\r\n")?句子末尾没有\r,是吗? - MayankJain
显示剩余3条评论

1
file.readlines()

(还包括file.readline())其中包含换行符。

print i.replace('\n', '')

如果你不想要它们。

在行末包含换行符可能看起来很奇怪,但这允许你判断最后一行是否有换行符。在许多语言的I/O中,这种情况很棘手。


1
以下内容将为您去除换行符。
i = i.rstrip("\n") #strips newline

希望这有所帮助。

0

这对我来说在Python 3中起作用了。 我发现rstrip()函数在这些情况下非常有用

for i in readtext:
    print(i.rstrip())

请添加描述。 - Wang Liang
嗨,我是新手。 请问我怎么添加描述? - Thinh Le

0
with open(txtname, 'r') as txtfile:
    lines = txtfile.readlines()
    lines = [j for j in lines if j != '\n']
with open(outname, 'w') as outfile:
    outfile.writelines(lines)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接