Python: splitlines trennt nicht nach Zeilenumbruch?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet
0D 0A

Ist 13 10, aka Carriage-Return+Linefeed, Zeilenumbruch unter Windows/Dos.

"wt"

Führt ansich ein truncate der Datei durch.

readlines() splittet an hinter \n, also direkt hinter 13 10.

Wenn Du die Datei als Textdatei öffnest und es zu einem Fehler kommt, dann gibt es vermutlich ein Kodierungsproblem.


GunnarPetite 
Beitragsersteller
 31.10.2022, 12:21

ich hab´s jetzt mit "rb" als Byte-Objekt eingelesen, als UTF-8 decoded und dann ging es plötzlich.

Habe in google einen guten Merksatz gefunden, der mir hilft:

Encode macht aus einem Text- ein Byte-Objekt, decode aus einem Byte-Objekt ein Textobjekt.

Das hätte ich mal früher kapieren müssen...

0
KarlRanseierIII  31.10.2022, 13:47
@GunnarPetite

b steht für binary, die Datei wird "as is" gelesen und als bytes zurückgeliefert.

t öffnet als text und transofrmiert, indem sie ein decode macht. Gibst Du beim Öffnen kein Encoding explizit an, so wird anhand der Platform das gängigste Encoding bestimmt.

Der Zeilenumbruch wird automatisiert bestimmt, kann aber auch beim open() explizit angegeben werden.

In jedem Fall liefert öffnen als t dann strings zurück anstatt bytes.

Übrigens kann auch das Fehlerverhalten gesetzt werden, wenn es zu einem Decode-Fehler kommt.

0
GunnarPetite 
Beitragsersteller
 01.11.2022, 13:05
@KarlRanseierIII

Normalerweise konnte ich auf Textdateien immer readlines() einsetzen, indem ich sie als t eingelesen habe. Dieses in utf-8 kodierte Dokument lies sich zwar als t einlesen, dann können aber nur die ASCII-Zeichen interpretiert werden.

Jetzt habe ich ein Problem beim zurückschreiben in eine HTML-Datei, wo ich base64-kodierte Bilder einfüge. Beim Zusammensetzen der HTML-Tags in python muss ich wohl alles kodieren, um es überhaupt aneinanderhängen zu können. Aber da meckert er trotzdem (Can´t concatenate str and byte). Obwohl ich alles schon vor dem Verknüpfen in utf-8 kodiere...

0

Ist es Unix?

Dort ist der Zeilenumbruch wohl eher anders


GunnarPetite 
Beitragsersteller
 28.10.2022, 15:55

Nein, es ist Windows.

0