dos2unix.py

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 7. November 2006, 18:30

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()
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
pythonguy
User
Beiträge: 28
Registriert: Donnerstag 22. November 2007, 18:51

Freitag 4. Januar 2008, 21:01

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: )
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 4. Januar 2008, 22:27

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
pythonguy
User
Beiträge: 28
Registriert: Donnerstag 22. November 2007, 18:51

Freitag 4. Januar 2008, 23:30

Vielen Dank, habe das Problem in IDLE gestartet und einen Error bekommen, deswegen war auch meine Frage, aber jetzt ist alles klar :)
lunar

Samstag 5. Januar 2008, 20:58

@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
Antworten