Sie können die gesamte Datei und die geteilten Zeilen lesen mit str.splitlines
:
temp = file.read().splitlines()
Oder Sie können den Zeilenumbruch von Hand entfernen:
temp = [line[:-1] for line in file]
Hinweis: Diese letzte Lösung funktioniert nur, wenn die Datei mit einem Zeilenumbruch endet. Andernfalls verliert die letzte Zeile ein Zeichen.
Diese Annahme gilt in den meisten Fällen (vor allem für Dateien , die von Text - Editoren erstellt, die oft tun eine Endung Newline hinzufügen sowieso).
Wenn Sie dies vermeiden möchten, können Sie am Ende der Datei eine neue Zeile hinzufügen:
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]
Oder eine einfachere Alternative ist strip
stattdessen die Newline:
[line.rstrip('\n') for line in file]
Oder sogar, obwohl ziemlich unlesbar:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
Was die Tatsache ausnutzt, dass der Rückgabewert von or
kein Boolescher Wert ist, sondern das Objekt, das als wahr oder falsch bewertet wurde.
Die readlines
Methode entspricht tatsächlich:
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
Da readline()
hält die Newline auch readlines()
.
Hinweis: für die Symmetrie readlines()
der writelines()
Methode nicht nicht hinzufügen Zeilenumbrüche am Ende, so f2.writelines(f.readlines())
erzeugt eine exakte Kopie f
in f2
.
[l.strip('\n\r') for l in temp]
. Oder sogarrstrip
. Und seit der Iteration hier kann esin open
statt seinin temp
.