我已经读过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
删除了字符串末尾和字符串开头的空格。
答案 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)