file.readlines留空行

时间:2013-11-04 06:04:34

标签: python string file-io

我已经读过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 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

file.readlines()

(以及file.readline())包括换行符。

待办事项

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

如果你不想要它们。

在行的末尾包含换行符似乎很奇怪,但是这允许您告诉最后一行是否有换行符。在许多语言的I / O中,这种情况很棘手。

答案 2 :(得分:1)

以下将为您删除换行符。

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

希望这有帮助。

答案 3 :(得分:0)

这对我来说适用于Python 3。 我发现rstrip()函数在这些情况下确实很有用

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

答案 4 :(得分: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)