Puoi leggere l'intero file e dividere le righe usando str.splitlines
:
temp = file.read().splitlines()
Oppure puoi rimuovere manualmente la nuova riga:
temp = [line[:-1] for line in file]
Nota: quest'ultima soluzione funziona solo se il file termina con una nuova riga, altrimenti l'ultima riga perderà un carattere.
Questo assunto è vero nella maggior parte dei casi (in particolare per i file creati da editor di testo, che spesso fanno aggiungere un ritorno a capo termina in ogni caso).
Se vuoi evitare questo, puoi aggiungere una nuova riga alla fine del 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]
O un'alternativa più semplice è strip
invece la newline:
[line.rstrip('\n') for line in file]
O addirittura, anche se piuttosto illeggibile:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
Il che sfrutta il fatto che il valore restituito di or
non è un valore booleano, ma l'oggetto che è stato valutato vero o falso.
Il readlines
metodo è effettivamente equivalente a:
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
Dal momento che readline()
mantiene la newline anche readlines()
mantiene.
Nota: per la simmetria per readlines()
il writelines()
metodo non non aggiunge finire a capo, quindi f2.writelines(f.readlines())
produce una copia esatta di f
a f2
.
[l.strip('\n\r') for l in temp]
. O addiritturarstrip
. E poiché l'iterazione qui può esserein open
invece diin temp
.