您可以使用读取整个文件并分割行str.splitlines
:
temp = file.read().splitlines()
或者,您可以手动删除换行符:
temp = [line[:-1] for line in file]
注意:仅当文件以换行符结尾时,后一种解决方案才有效,否则最后一行将丢失字符。
在大多数情况下,此假设是正确的(尤其是对于文本编辑器创建的文件,无论如何,它们通常都会添加结尾换行符)。
如果要避免这种情况,可以在文件末尾添加换行符:
with open(the_file, 'r+') as f:
f.seek(-1, 2) # go at the end of the file
if f.read(1) != '\n':
# add missing newline if not already present
f.write('\n')
f.flush()
f.seek(0)
lines = [line[:-1] for line in f]
或更简单的替代方法是strip
换行符:
[line.rstrip('\n') for line in file]
甚至,尽管很难理解:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
这利用了以下事实:的返回值or
不是布尔值,而是被评估为true或false的对象。
该readlines
方法实际上等效于:
def readlines(self):
lines = []
for line in iter(self.readline, ''):
lines.append(line)
return lines
# or equivalently
def readlines(self):
lines = []
while True:
line = self.readline()
if not line:
break
lines.append(line)
return lines
因为readline()
保留换行符也readlines()
保留它。
注意:为了readlines()
使writelines()
方法对称,不会添加结尾换行符,因此f2.writelines(f.readlines())
会生成f
in 的精确副本f2
。
[l.strip('\n\r') for l in temp]
。甚至rstrip
。由于这里的迭代,它可以in open
代替in temp
。