您可以使用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 的返回值不是布尔值,而是被评估为真或假的对象这一事实。
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 的精确副本987654339@.