使用Python读取文本文件时的行尾字符

35 投票
6 回答
125280 浏览
提问于 2025-04-11 19:29

在用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] 这个方法如果最后一行没有换行符的话就会出错。

撰写回答