In Python anrufen
temp = open(filename,'r').readlines()
führt zu einer Liste, in der jedes Element eine Zeile in der Datei ist. Es ist ein bisschen dumm, aber trotzdem: readlines()
Schreibt auch ein Zeilenumbruchzeichen in jedes Element, was ich nicht möchte.
Wie kann ich das vermeiden?
python
line-breaks
readlines
Yotam
quelle
quelle
[l.strip('\n\r') for l in temp]
. Oder sogarrstrip
. Und seit der Iteration hier kann esin open
statt seinin temp
.newline
Argument von open auf diese verkürzten nachgestellten Zeilenumbrüche zu setzen.Antworten:
Sie können die gesamte Datei und die geteilten Zeilen lesen mit
str.splitlines
:Oder Sie können den Zeilenumbruch von Hand entfernen:
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:
Oder eine einfachere Alternative ist
strip
stattdessen die Newline:Oder sogar, obwohl ziemlich unlesbar:
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:Da
readline()
hält die Newline auchreadlines()
.Hinweis: für die Symmetrie
readlines()
derwritelines()
Methode nicht nicht hinzufügen Zeilenumbrüche am Ende, sof2.writelines(f.readlines())
erzeugt eine exakte Kopief
inf2
.quelle
[line.rstrip('\n') for line in file]
mehr als ein nachfolgendes Zeichen entfernt wird\n
.[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
könnte stattdessen sein[line[:-(line[-1] == '\n') or None] for line in file]
.for line in (x.strip() for x in f):
with
die Dateien geschlossen werden, wenn der Block beendet wird. Dies bedeutet, dass Sie dies nicht tunwith open(...) as f: lines = (line for line in f)
und verwenden könnenlines
außerhalb vonwith
da ein E / A-Fehler auftritt. Sie können mit einem Genexp faul sein, aber Sie müssen es verbrauchen, bevor Sie die Datei schließen.quelle
\r\n
Zeilenumbrüchen passieren ? ;).split('\n')
wird daher unabhängig von der Zeilenumbruchkonvention korrekt aufgeteilt. Es wäre wichtig, wenn Sie die Datei im Binärmodus lesen. In diesem Fall werdensplitlines()
universelle Zeilenumbrüche behandelt, währendsplit('\n')
dies nicht der Fall ist .os.linesep
:)\r\n
Zeilenenden nicht konvertiert\n
, ob als Text oder Binär gelesen, alsoos.linesep
würde funktionieren, wo\n
nicht. Abersplitlines
ist eindeutig die bessere Wahl, wenn Sie erwähnen, wo die Datei nicht mit dem Betriebssystem übereinstimmt. Wirklich, ich habe es meistens erwähnt, falls die Leute, die sich diese Diskussion ansehen, sich ihrer Existenz nicht bewusst waren.\r\n
für Textdateien konvertiert werden, selbst wenn Sie unter Linux arbeiten.ein anderes Beispiel:
Datei wird zeilenweise gelesen. Entfernen unerwünschter Zeichen mit vom Ende der Zeichenfolge
str.rstrip(chars)
siehe auch
str.strip([chars])
undstr.lstrip([chars])
(Python> = 2,0)
quelle
quelle
Ich denke, das ist die beste Option.
quelle
temp = [line.rstrip() for line in file.readlines()]
, um zu ermitteln, was @ Roland_Illig-Notizen beabsichtigt sind..readlines()
iterieren Sie effektiv zweimal über die gesamte Datei.Versuche dies:
quelle
quelle
.readlines()
diese Weise iterieren Sie effektiv zweimal über die gesamte Datei.quelle
quelle