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!