Befehl aus vim in Python Skript impl.

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.
Gast

Donnerstag 3. Februar 2005, 11:52

Hallo
ich möchte den vim-Editor Befehl :set fileformat=unix

aus einem Python Skript aufrufen.
Allerdings weiß ich absolut nicht wie ich das anstellen soll.

Es geht darum dass ich ein text file einlese welches nicht unix format hat. Ich brauche aber das Unix format damit die blöden ^M am Ende jeder Zeile verschwinden und damit mein Programm richtig funktioniert.

Für Hilfe bin ich sehr dankbar!

Cya
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Donnerstag 3. Februar 2005, 12:13

Hi!

Keine Ahnung wie Du dem vim-Befehl aufrufen kannst.
Du könntest aber entweder:
-) das Programm dos2unix aus dem Python-Script heraus aufrufen, oder
-) alle \r mittels Python aus der Textdatei entfernen (wenn mich nicht alles täuscht, kommt das ^M ja nur daher, daß Windows für ein Newline \r\n verwendet)

Gruß, mawe
Gast

Donnerstag 3. Februar 2005, 13:25

Ja genau...;)
ich müsste immer die \r löschen.
Komischerweise habe ich beobachtet dass auf meiner suse distri das programm läuft ohne \r und auf FEdora Core net....frag mich net warum aber is so....

Deswegen würde ich gern die files auf jeden Fall aufs unix format bringen wollen...

Trotzdem Danke für deine Hilfe!!
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Donnerstag 3. Februar 2005, 14:06

Hi Gast,

Du kannst dir auch eine kleine Zeile in die /.vim/vimrc schreiben, die immer das Fileformat auf unix setzt nach dem Einlesen einer Datei in vim.

Code: Alles auswählen

au BufReadPost *.* set fileformat=unix
Falls es sich um bestimmte Dateien handelt kannst Du auch statt *.* z.B. *.foo oder ähnliches verwenden.

Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Donnerstag 3. Februar 2005, 14:11

Hi Dookie!

Guter Tipp! Ich glaube aber, daß Gast vim gar nicht verwenden will, sondern die Textdatei gleich nach dem Download (oder wo die auch immer herkommt) mit Python bearbeiten will. Jedenfalls hab ich's so verstanden.

Gruß, mawe
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Donnerstag 3. Februar 2005, 14:29

tja, dann

Code: Alles auswählen

f = file("text.txt", "rU")
#mach was mit der Datei
f.close()
das U öffnet die Datei mit "universal newline support". D.h. jedes zeilenende wird als \n gelesen, egal ob \r\n \n \r.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 3. Februar 2005, 15:41

Das ist ja cool!!! Warum nicht also immer file() ???

Aus der Dok:
The file() constructor is new in Python 2.2. The previous spelling, open(), is retained for compatibility, and is an alias for file().
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 3. Februar 2005, 15:45

jens hat geschrieben:Das ist ja cool!!! Warum nicht also immer file() ???

Aus der Dok:
The file() constructor is new in Python 2.2. The previous spelling, open(), is retained for compatibility, and is an alias for file().
Nochmal lesen, das steht doch drin.
Wenn man open() aus, sagen wir mal Python 2.5 rausnimmt, kannst du keine Python 2.1 Skripte mehr ausführen, da diese alle open nutzen, was es dann aber nicht mehr gibt. Logisch?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 3. Februar 2005, 16:28

Ich meinte für mich selber, für meine Sachen, immer das neuere file() statt open() zu nehmen...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 3. Februar 2005, 16:58

Ja klar, solange du keine komatibilität zu Python 2.1 brauchst. In meiner Erfahrung scheitert bei mit die Kompatibilität schon an ganz anderen Sachen. :?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Freitag 4. Februar 2005, 02:24

Die Doku ist an der Stelle etwas irreführend! file() soll keineswegs open() ersetzen und man sollte auch weiterhin open() verwenden um Dateien zu öffnen.

file() ist bloss dazugekommen weil man mittlerweile von den ganzen eingebauten Typen erben kann und es irgendwie bescheuert/falsch aussieht von "open" zu erben:

Code: Alles auswählen

class Foo(open): pass

# versus

class Bar(file): pass
Es gab Anfang dieses Jahres einen doc bug report, der mittlerweile wohl auch in die Entwicklerdoku eingeflossen ist.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 4. Februar 2005, 13:28

Was macht das für einen Unterschied? Ich nutze seit jeher file(), da mir der Name auch besser gefällt, ich ihn beschriebender finde. Funktionieren tut es ja genauso.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Freitag 4. Februar 2005, 19:13

Hui danke für die Antworten...
werds gleich ausprobieren
BlackJack

Freitag 4. Februar 2005, 23:53

Leonidas hat geschrieben:Was macht das für einen Unterschied? Ich nutze seit jeher file(), da mir der Name auch besser gefällt, ich ihn beschriebender finde. Funktionieren tut es ja genauso.
Im Moment macht es keinen Unterschied weil beide Namen das selbe Objekt bezeichnen. Wird sich wohl auch nicht ändern. Ich wollte halt nur sagen, dass die Doku an dieser Stelle vielleicht den Eindruck erweckt, dass man nur noch file() verwenden soll und open() veraltet ist. Guido van Rossum sieht das aber anders, file war nur zum erben gedacht.
Gast

Dienstag 8. Februar 2005, 09:28

Hallo,
hmmm
irgendwie funktioniert das mit dem "rU" nicht so ganz...

Bei ist der code folgendermaßen:

Code: Alles auswählen

ref_file = file(ref_file, "rU") # rU -> read in Unix fileformat
lines_in_ref_file = ref_file.readlines()
remove_all(lines_in_ref_file,"\n")
ref_file.close()
Wieso?
Antworten