Вы можете прочитать весь файл и разделить строки, используя 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
в f2
.
[l.strip('\n\r') for l in temp]
. Или дажеrstrip
. И с итерации здесь это может бытьin open
вместоin temp
.