[Python-de] Universal Newline Support

kgm km-news3 at onlinehome.de
Mon Mar 28 01:22:13 CEST 2005


Hallo *,

ich spiele gerade mit dem Newline-Support in Python unter Windows etwas  
rum.
Schreibe ich die test.txt Datei mit dem Mini-Script unten und schaue mir  
das Ergebnis im Hex-Editor an, sehe ich, das alle \n in der Datei als \r\n  
in die Datei geschrieben wurden.

Liest man die Datei wieder mit "r" ein, wird diese Umwandlung in  
umgekehrter Richtung gemacht, aus jedem \r\n in der Datei wird im String  
wieder EIN \n.
Deshalb werden auch 3 Zeilen eingelesen, Zeile 3+4 rutschen zusammen (sind  
unter Win ja auch keine 2 Zeilen, \r ist ja kein Newline). Ausgabe des  
Skriptes siehe unten.

Liest man die Datei nun aber mit "rU" ein, werden wie eben auch die \r\n  
zu einem \n zusammengefasst, aber zusätzlich wird auch noch das allein  
stehende \r in eine \n umgewandelt. Zeile 3 und 4 werden jetzt also nicht  
mehr zusammengefügt, aber Zeile 1 und 4 erhalten jeweils noch eine  
Leerzeile angefügt.


Mich würde mal interessieren, was wie das in Unix abläuft und wie das  
Ergebnis aussieht? Falls das jemand ausprobieren könnte? Danke!


#!/usr/bin/python
# -*- coding: Latin-1 -*-
# Test CR,NL und Universal-Newline-Support

of = open("test.txt", "w")
of.write("Z 1 \\r\\n \r\n")
of.write("Z 2 \\n      \n")
of.write("Z 3 \\r      \r")
of.write("Z 4 \\r\\n \r\n")
of.close()

of = open("test.txt", "r")
x = of.readlines()
print 'Open mit "r":', len(x), x
of.close()

of = open("test.txt", "rU")
x = of.readlines()
print 'Open mit "rU":', len(x), x
of.close()


Ausgabe:

Open mit "r": 3 ['Z 1 \\r\\n \r\n', 'Z 2 \\n      \n', 'Z 3 \\r      \rZ 4  
\\r\\n \r\n']
Open mit "rU": 6 ['Z 1 \\r\\n \n', '\n', 'Z 2 \\n      \n', 'Z 3 \\r       
\n', 'Z 4 \\r\\n \n', '\n']



Freundliche Grüße
Klaus Meyer