使用python从文本文件中读取行时,通常需要在处理文本之前截断行尾字符,如下例所示:
f = open("myFile.txt", "r") for line in f: line = line[:-1] # do something with line
是否有一种优雅的方式或习惯用于检索没有终结字符的文本行?
在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()必须立即将整个文件加载到内存中.
如果最后一行没有EOL,line = line [: - 1]将失败.
简单.使用splitlines()
L = open("myFile.txt", "r").read().splitlines(); for line in L: process(line) # this 'line' will not have '\n' character at the end
您的代码有什么问题?我发现它非常优雅和简单.唯一的问题是,如果文件没有以换行符结尾,则返回的最后一行将不会有'\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