Вы можете прочитать весь файл и разделить строки, используя 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.