691 Stimmen

Wie kann man eine Datei ohne Zeilenumbrüche lesen?

In Python ist der Aufruf von z.B. temp = open(filename,'r').readlines() ergibt eine Liste, in der jedes Element eine Zeile aus der Datei ist. Diese Zeichenketten haben jedoch ein Zeilenumbruchzeichen am Ende, was ich nicht möchte.

Wie kann ich die Daten ohne die Zeilenumbrüche erhalten?

967voto

Bakuriu Punkte 91990

Sie können die gesamte Datei lesen und die Zeilen mit str.splitlines :

temp = file.read().splitlines()

Oder Sie können den Zeilenumbruch von Hand entfernen:

temp = [line[:-1] for line in file]

Anmerkung: diese letzte Lösung funktioniert nur, wenn die Datei mit einem Zeilenumbruch endet, da sonst die letzte Zeile ein Zeichen verliert.

Diese Annahme trifft in den meisten Fällen zu (insbesondere bei Dateien, die mit Texteditoren erstellt wurden, die oft tun trotzdem einen abschließenden Zeilenumbruch hinzufügen).

Wenn Sie dies vermeiden wollen, können Sie am Ende der Datei einen Zeilenumbruch einfü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 den Zeilenumbruch:

[line.rstrip('\n') for line in file]

Oder sogar, obwohl ziemlich unleserlich:

[line[:-(line[-1] == '\n') or len(line)+1] for line in file]

Dabei wird die Tatsache ausgenutzt, dass der Rückgabewert von or ist kein boolescher Wert, sondern das Objekt, das als wahr oder falsch bewertet wurde.


T readlines Methode ist eigentlich gleichbedeutend mit:

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

Desde readline() behält auch den Zeilenumbruch bei readlines() behält sie.

Anmerkung: für die Symmetrie zu readlines() el writelines() Methode tut no endende Zeilenumbrüche hinzufügen, also f2.writelines(f.readlines()) erzeugt eine exakte Kopie von f en f2 .

102voto

vivek Punkte 4653
temp = open(filename,'r').read().split('\n')

37voto

O-9 Punkte 1315

Lesen der Datei eine Zeile nach der anderen. Entfernen von unerwünschten Zeichen am Ende der Zeichenkette mit str.rstrip(chars) .

with open(filename, 'r') as fileobj:
    for row in fileobj:
        print(row.rstrip('\n'))

Siehe auch str.strip([chars]) y str.lstrip([chars]) .

26voto

RENZO Punkte 245

Ich denke, das ist die beste Option.

temp = [line.strip() for line in file.readlines()]

14voto

Marcel Punkte 2492
temp = open(filename,'r').read().splitlines()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X