使用Python读取文本文件时的行尾字符
在用Python读取文本文件的内容时,通常需要在处理文本之前去掉每行末尾的换行符,就像下面这个例子:
f = open("myFile.txt", "r")
for line in f:
line = line[:-1]
# do something with line
有没有什么简单的方法或者常用的写法,可以获取没有换行符的文本行呢?
6 个回答
6
你的代码有什么问题呢?我觉得它写得很优雅,也很简单。唯一的问题是,如果文件最后没有换行符,那么返回的最后一行就不会以'\n'
结尾。因此,执行line = line[:-1]
时,会错误地把这一行的最后一个字符去掉。
解决这个问题最优雅的方法是定义一个生成器,它会读取文件的每一行,并且只在最后一个字符是换行符时,才去掉这个字符:
def strip_trailing_newlines(file):
for line in file:
if line[-1] == '\n':
yield line[:-1]
else:
yield line
f = open("myFile.txt", "r")
for line in strip_trailing_newlines(f):
# do something with line
17
很简单。使用 splitlines() 方法。
L = open("myFile.txt", "r").read().splitlines();
for line in L:
process(line) # this 'line' will not have '\n' character at the end
53
在Python中,最常用的方法是用rstrip('\n')来处理这个问题:
for line in open('myfile.txt'): # opened in text-mode; all EOLs are converted to '\n'
line = line.rstrip('\n')
process(line)
其他方法都有一些小问题:
- file('...').read().splitlines() 这个方法需要一次性把整个文件都加载到内存里。
- line = line[:-1] 这个方法如果最后一行没有换行符的话就会出错。