dos2unix

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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()
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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)...
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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:
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Hallo Leute,

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

Stephan
Antworten