lg Deadman44
> ich habe da ein kleines Problem.
> self.file = (os.path.split(self.filename) [0],\
> os.path.splitext(os.path.basename(self.filename)))
> Dabei wird an erste Stelle einfach ein String in das Tupel eingefügt,
> doch an zweiter Stelle wird ein weiteres Tupel als Tupelelemnt eingefügt:
> ('C:/Dokumente und Einstellungen/Markus/Eigene Dateien/python/youtube',\
> ('NEW_Medal_Of_Honor_Trailer', '.flv'))
> DOch würde ich es gerne erreichen, dass der Tupel der 2. Dimension als
> Elemente der ersten angehängt werden:
> ('C:/Dokumente und Einstellungen/Markus/Eigene Dateien/python/youtube',\
> 'NEW_Medal_Of_Honor_Trailer', '.flv')
> Python stellt ja einiges für die "Onthefly" Tupelmanipulation bereit,
> habe auch schon diverses probiert, aber bin nie zum Erfolg gekommen.
> Zumindest nur über Umwege.
> Gibt es eine Möglichkeit das ganze elegant so hinzubekommen, wie
> beschrieben?
>>> (os.path.dirname(fn),) + os.path.splitext(os.path.basename(fn))
('C:/Dokumente und Einstellungen/Markus/Eigene Dateien/python/youtube',
'NEW_Medal_Of_Honor_Trailer', '.flv')
Meines Erachtens besser, da nur einmal Verzeichnis- und Dateiname getrennt
werden:
>>> def mysplit(fn):
... dir, base = os.path.split(fn)
... return (dir,) + os.path.splitext(base)
...
>>> mysplit(fn)
('C:/Dokumente und Einstellungen/Markus/Eigene Dateien/python/youtube',
'NEW_Medal_Of_Honor_Trailer', '.flv')
Wenn eine benutzerdefinierte Funktion die Möglichkeit bietet, Klimmzüge zu
vermeiden, solltest Du diese Möglichkeit nutzen.
Peter
ich habe deine Mail mal etwas umformatiert, damit sie lesbar wird.
Markus Feilen, 15.12.2009 14:39:
> self.file = (os.path.split(self.filename) [0],\
> os.path.splitext(os.path.basename(self.filename)))
>
> Dabei wird an erste Stelle einfach ein String in das Tupel eingefᅵgt,
> doch an zweiter Stelle wird ein weiteres Tupel als Tupelelemnt eingefᅵgt:
>
> ('C:/Dokumente und Einstellungen/Markus/Eigene Dateien/python/youtube',\
> ('NEW_Medal_Of_Honor_Trailer', '.flv'))
>
> DOch wᅵrde ich es gerne erreichen, dass der Tupel der 2. Dimension als
> Elemente der ersten angehᅵngt werden:
> ('C:/Dokumente und Einstellungen/Markus/Eigene Dateien/python/youtube',\
> 'NEW_Medal_Of_Honor_Trailer', '.flv')
z.B. so:
path, filename = os.path.split(self.filename)
file_parts = (path,) + tuple(os.path.splitext(filename))
oder besser so:
path, filename = os.path.split(self.filename)
basename, extension = os.path.splitext(filename)
file_parts = (path, basename, extension)
Letzteres finde ich recht lesbar.
Stefan
self.file = [os.path.split(self.filename)[0]] + \
list(os.path.splitext(os.path.basename(self.filename)))
Gruᅵ,
Matthias
> self.file = (os.path.split(self.filename) [0],\
> os.path.splitext(os.path.basename(self.filename)))
x_file = (os.path.split(filename)[0], ) + \
(os.path.splitext(os.path.basename(filename)))
Gruᅵ,
Matthias
... wobei die Klammern um den letzten Ausdruck natᅵrlich redundant sind ...
Stefan
> Matthias Esken, 15.12.2009 15:13:
>
>> x_file = (os.path.split(filename)[0], ) + \
>> (os.path.splitext(os.path.basename(filename)))
>
> ... wobei die Klammern um den letzten Ausdruck natᅵrlich redundant sind ...
... ᅵhmmmm ... jaaaa ... grᅵbel ... Das war nur zur Verdeutlichung!
Tatsᅵchlich sind sie allerdings dort, weil ich die Frage vorher nicht
genau gelesen hatte und eine Liste aus dem ganzen gemacht habe statt ein
Tupel zu erstellen. Nach dem Lᅵschen von "list" in der zweiten Zeile
sind die Klammern dann dort noch einsam verblieben.
Gruᅵ,
Matthias
lg Deadman44
Im Zweifelsfall w�rde ich eine eigene Funktion nehmen, die dir das Tupel
aufbaut und es nicht inline machen.
Aber wenn es unbedingt inline sein
muss, kannst du Tupel addieren:
(a(),) + b()
wenn a() und b() die beiden Funktionen von oben sind.
HTH
Mirko
--
"C gives you enough rope to hang yourself. C++ also gives you the tree
object to tie it to."
unknown
+1, guter Tipp.
Stefan