Sie können die gesamte Datei und Trennlinien str.splitlines
mit lesen:
temp = file.read().splitlines()
Oder Sie können von Hand das Newline Streifen:
temp = [line[:-1] for line in file]
Hinweis: diese letzte Lösung funktioniert nur, wenn die Datei endet mit einem Zeilenumbruch, sonst verliert die letzte Zeile ein Zeichen.
Diese Annahme ist in den meisten Fällen wahr (besonders für Dateien, die von Texteditoren erstellt wurden, die oft tun fügen Sie eine End-Zeilenumbruch sowieso).
Wenn Sie dies vermeiden wollen Sie eine neue Zeile am Ende der Datei 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 zu strip
die Newline statt:
[line.rstrip('\n') for line in file]
Oder sogar, obwohl ziemlich unlesbar:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
Welche nutzt die Tatsache, dass die Rückkehr va lue von or
ist kein boolescher Wert, sondern das Objekt, das als wahr oder falsch ausgewertet wurde.
readlines
Die Methode ist eigentlich äquivalent zu:
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()
Da die Neue-Zeile hält auch readlines()
es hält.
Hinweis: für Symmetrie readlines()
die writelines()
Methode macht nicht hinzufügen Zeilenumbrüche am Ende, so f2.writelines(f.readlines())
eine exakte Kopie von f
in f2
produziert.
Verwenden Strip: '[l.strip ('\ n \ r') für L in temp]'. Oder sogar 'rstrip'. Und seit Iteration kann es hier "offen" statt "in Temp" sein. – gorlum0
Diese Frage ist verantwortlich für jeden Reputationswert, den ich habe – Yotam
Ich wäre nett, wenn es in Python 3 einen Wert geben würde, um das 'newline'-Argument von open zu diesen chomped trailing newlines zu setzen. – jxramos