10

我读过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

我的问题是为什么我会在每个句子之间添加额外的线,我该如何摆脱它?

更新

我发现 usingi.strip也删除了多余的行。为什么会这样?据我所知,split删除字符串末尾和开头的空格。

4

5 回答 5

11

file.readlines()返回字符串列表。每个字符串都包含尾随换行符。print语句用 newlnie 打印传递的参数。这就是为什么你有额外的行。

要删除额外的换行符,请使用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
于 2013-11-04T06:05:19.917 回答
1
file.readlines()

(and also file.readline()) 包括换行符。

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

如果你不想要它们。

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

于 2013-11-04T06:06:15.433 回答
1

下面将为您删除换行符。

i = i.rstrip("\n") #strips newline

希望这可以帮助。

于 2013-11-04T06:34:26.853 回答
0

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

for i in readtext:
    print(i.rstrip())
于 2019-06-14T09:05:21.967 回答
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)
于 2020-11-07T18:38:21.677 回答