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
Befehl aus vim in Python Skript impl.
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
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
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
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!!
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!!
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
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.
Falls es sich um bestimmte Dateien handelt kannst Du auch statt *.* z.B. *.foo oder ähnliches verwenden.
Gruß
Dookie
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
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
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
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
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
tja, dann
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: Alles auswählen
f = file("text.txt", "rU")
#mach was mit der Datei
f.close()
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Das ist ja cool!!! Warum nicht also immer file() ???
Aus der Dok:
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().
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Nochmal lesen, das steht doch drin.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().
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 (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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 (former) Modvoice
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:
Es gab Anfang dieses Jahres einen doc bug report, der mittlerweile wohl auch in die Entwicklerdoku eingeflossen ist.
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
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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 (former) Modvoice
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.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.
Hallo,
hmmm
irgendwie funktioniert das mit dem "rU" nicht so ganz...
Bei ist der code folgendermaßen:
Wieso?
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()
Ich weiss jetzt nicht ob das nicht ein kleines 'u' sein muss.
Ansonsten sag doch bitte mal, was genau nicht funktioniert. Was erwartest Du und was bekommst Du statt dessen.
Ansonsten sag doch bitte mal, was genau nicht funktioniert. Was erwartest Du und was bekommst Du statt dessen.
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi,
"U" muss schon gross sein, siehe pydoc file
geht das?
könnte man so noch etwas komprimieren:
Gruß
Dookie
"U" muss schon gross sein, siehe pydoc file
geht das?
Code: Alles auswählen
ref_file = file(ref_file, "rU") # rU -> read with "universal newline"
lines_in_ref_file = list(ref_file) # more efficient than ref_file.readlines()
ref_file.close()
# remove all newlines
lines_in_ref_file = [x.rstrip('\n') for x in lines_in_ref_file]
Code: Alles auswählen
ref_file = file(ref_file, "rU") # rU -> read with "universal newline"
lines_in_ref_file = [x.rstrip('\n') for x in ref_file]
ref_file.close()
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]