Seite 1 von 1

dos2unix

Verfasst: Dienstag 1. Juni 2004, 18:39
von Mawilo
Hallo zusammen,

wie kann ich den Unix-Befehl: dos2unix -ascii in Python durchführen? Ich möchte Dateien, die in einer Windows-Umgebung erstellt wurden, in Unix verwenden.


Stephan

Verfasst: Dienstag 1. Juni 2004, 19:03
von Milan
Hi. Ganz einfach binär öffnen und die Zeilenumsprünge editieren:

Code: Alles auswählen

f=file("text.txt","rb")
i=f.read()
f.close()
i=i.replace("\r\n","\n")
f=file("text.txt","wb")
f.write(i)
f.close()

Verfasst: Dienstag 1. Juni 2004, 19:28
von Dookie
Hi auch,

oder öffne die Dateien mit "ru"

Code: Alles auswählen

infile = file("dos.txt", "ru")
outfile = file("unix.txt", "w")
for line in infile:
    outfile.write(line)
Gruß

Dookie

Verfasst: Dienstag 1. Juni 2004, 19:35
von Milan
Hi. das wird nur bedingt klappen. Ich weiß nicht, was Linux im universal Mode macht, denn da könnte Python davon ausgehen, dass bereits \n vorherscht. Und unter win musst du beachten, dass du die Datei binär zum schreiben öffnest, sonst funkt dir Windows beim speichern wieder dazwischen und du hast dieselbe Datei wie vorher (unter lin kein Problem, da es da ja nur binär geht)...

Verfasst: Dienstag 1. Juni 2004, 19:56
von Dookie
er will ja die Windowsdateien in Linux unter Python verwenden, dafür is ja das "u" gedacht oder nicht? Wobei um die Inhalte zu verwenden, wird man eh Zeilenweise einlesen und dann mit strip() die Dateiendungen wegmachen bevor man den Inhalt verwendet.


Gruß

Dookie

Verfasst: Dienstag 1. Juni 2004, 21:03
von Milan
Hi. Hast Recht, habs gerade nachgelesen. Nur für die generelle Nutzung (sowie win als auch lin wäre es trotzdem besser, wb zu machen :wink:)

Was anderes: das mit dem strip um die Newlines wegzumachen finde ich nicht gut, denn es kann ganz schnell zu bösen Seiteneffekten kommen:

Code: Alles auswählen

>>> "\thaha\n".strip()
'haha'
Selbst wenn du rstrip benutzt, kann am Ende ja noch mehr als ein Newline stehen, z.B. ein Leerzeichen oder wie oben auch ein Tab... Das ist dann alles weg, ohne es je gesehen zu haben :wink: Ein replace("\n","") finde ich wesentlich besser :roll:

Verfasst: Dienstag 1. Juni 2004, 21:17
von Dookie
HiHo,

naja, hängt vom Verwendungszweck ab, whitespaces am Begin und am Ende von Zeilen sind meisst nur für den Menschlichen Leser da, ansonst gibts ja genug möglichkeiten um Zeilen für die Weiterverarbeitung aufzubereiten unter Python.


Gruß

Dookie

Verfasst: Mittwoch 2. Juni 2004, 13:19
von Mawilo
Hallo Leute,

vielen Dank für die Hinweise. Ich werde das sofort mal testen.

Stephan