Freitag, 29. Januar 2010

Python und die Newlines

Klingt nach ner lustigen Sketchcomedy, ist aber gar nicht witzig:

Wie ich bei der Arbeit mit codeextract herausgefunden habe können die unsichtbaren Voodoozauber von Python manchmal auch murks erzeugen. Python arbeitet, wenn es um Strings geht, intern mit \n also Unix-Zeilenumbruchszeichen. Windows verwendet hingegen eine Kombination von \r\n.

Python macht es sich beim speichern eines Strings in eine Datei (meinedatei.write(string)) ganz einfach: Wenn das Skript unter Windows läuft ersetzt der Interpreter \n durch \r\n.

Preisfrage: Was passiert wenn der String ein Windows-Format aufweist und in eine Datei gespeichert wird?
Antwort: Aus \r\n wird \r\r\n!

Das führt dazu dass die Textdatei entweder (Je nach Texteditor) gar nicht angezeigt werden kann, oder zwischen jeder Zeile eine Leerzeile entsteht.

Bei den ActiveState Recipies bin ich aber auf eine elegante und einfache Lösung gestoßen. Per Regular Expression werden hier jegliche Newline-Formate auf Unix-Format (\n) normalisiert:


import re
windows_string = 'Zeile 1\r\nZeile 2'
unix_string = re.sub(r'(\r\n\r\n)', '\n', string)
# unix_string --> 'Zeile 1\nZeile 2'


Das ganze hab ich schon in codextract ausprobiert. Funktioniert blendend!

1 Kommentar:

  1. Hallo Leute, wenn Sie einen echten Hacker einstellen müssen, um das Telefon Ihres Partners fernüberwachen / hacken, Ihr gestohlenes Bitcoin in Tagen / Wochen handeln oder wiederherstellen oder eine Datenbank mit garantierter Vertraulichkeit hacken können, wenden Sie sich an easybinarysolutions@gmail.com oder whatsapp: +1 3478577580, sie sind effizient und vertraulich.

    AntwortenLöschen