Seite 1 von 1

dos2unix.py

Verfasst: Dienstag 7. November 2006, 18:30
von gerold
dos2unix.py

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import sys
import tempfile


def dos2unix(filename):
    infile = file(filename, "rb")
    outfile = tempfile.TemporaryFile()
    for line in infile:
        line = line.replace("\r\n", "\n")
        outfile.write(line)
    infile.close()
    infile = file(filename, "wb")
    outfile.seek(0)
    for line in outfile:
        infile.write(line)
    infile.close()
    outfile.close()


def main():
    dos2unix(sys.argv[1])


if __name__ == "__main__":
    main()

Verfasst: Freitag 4. Januar 2008, 21:01
von pythonguy
Erstmal danke für das Script, kannst du vielleicht noch kurz erklären, wie das Script anzuwenden ist (mit den beiden Modulen habe ich mich leider noch nie was gemacht :oops: )

Verfasst: Freitag 4. Januar 2008, 22:27
von gerold
Hallo pythonguy!

Dieses kleine Programm kann die Windows-Zeilenenden (\r\n) einer Textdatei durch Linux-Zeilenenden ersetzen. Python-Programme sind auch nur Textdateien. Wenn du diese in Windows schreibst, dann endet jede Zeile mit einem Return und einem LineFeed, also einem Wagenrücklaufzeichen und einem Zeichen um in die nächste Zeile zu springen. Diese Zeichen sind unsichtbar. Können aber in Python durch \r (=Return) und \n (=LineFeed) angesprochen werden.

Wenn du also dieses Programm "dos2unix.py" mit der umzuwandelnden Textdatei als Kommandozeilenparameter aufrufst, dann werden die Zeilenendzeichen "\r\n" dieser Datei durch "\n" ersetzt.

Nehmen wir mal an, dass sich das Programm "dos2unix.py" und deine Programmdatei, nennen wir sie mal "test.py", im gleichen Ordner befinden. Öffne die DOS-Konsole und wechsle in der DOS-Konsole in diesen Ordner.
Der Aufruf zum Umwandeln könnte dann so aussehen:

Code: Alles auswählen

dos2unix.py test.py
So lange du aber noch nicht genau Bescheid weißt, würde ich das aber nur mit einer Kopie deiner "test.py"-Datei machen.

mfg
Gerold
:-)

Verfasst: Freitag 4. Januar 2008, 23:30
von pythonguy
Vielen Dank, habe das Problem in IDLE gestartet und einen Error bekommen, deswegen war auch meine Frage, aber jetzt ist alles klar :)

Verfasst: Samstag 5. Januar 2008, 20:58
von lunar
@gerold
Ich denke, den Umweg über eine temporäre Datei kannst du dir sparen. Angesichts heutiger Speichergrößen und der Tatsache, dass Textdateien üblicherweise nicht mehrere hundert Megabyte umfassen, ist es wohl schneller, die Datei direkt im Arbeitsspeicher zu konvertieren.

Ich habe das ganze so gelöst:
http://paste.pocoo.org/show/19572

Funktioniert genauso, mit dem Bonus, dass das Programm die Konvertierung abhängig von Namen der ausführbaren Datei vornimmt:
  • dos2unix(.py) = \r\n -> \n
  • unix2dos(.py) = \n -> \r\n