您可以使用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) != '
':
# add missing newline if not already present
f.write('
')
f.flush()
f.seek(0)
lines = [line[:-1] for line in f]
或者更简单的替代方法是取消换行:
[line.rstrip('
') for line in file]
甚至,虽然很不可读:
[line[:-(line[-1] == '
') or len(line)+1] for line in file]
其中利用了返回值或不是布尔值,但被评估为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())在f2中生成f的精确副本.