Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

einzelne Elemente einer Liste durchlaufen

0 views
Skip to first unread message

Markus Feilen

unread,
Dec 15, 2009, 8:39:44 AM12/15/09
to
Hallo,
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?

lg Deadman44

Peter Otten

unread,
Dec 15, 2009, 9:06:09 AM12/15/09
to
Markus Feilen wrote:

> 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

Stefan Behnel

unread,
Dec 15, 2009, 9:06:49 AM12/15/09
to
Hi,

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

Matthias Esken

unread,
Dec 15, 2009, 9:11:07 AM12/15/09
to
Am 15.12.2009 14:39, schrieb Markus Feilen:
> self.file = (os.path.split(self.filename) [0],\
> os.path.splitext(os.path.basename(self.filename)))

self.file = [os.path.split(self.filename)[0]] + \
list(os.path.splitext(os.path.basename(self.filename)))

Gruᅵ,
Matthias

Matthias Esken

unread,
Dec 15, 2009, 9:13:37 AM12/15/09
to
Am 15.12.2009 14:39, schrieb Markus Feilen:

> 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

Stefan Behnel

unread,
Dec 15, 2009, 9:15:54 AM12/15/09
to
Matthias Esken, 15.12.2009 15:13:

... wobei die Klammern um den letzten Ausdruck natᅵrlich redundant sind ...

Stefan

Matthias Esken

unread,
Dec 15, 2009, 9:30:26 AM12/15/09
to
Am 15.12.2009 15:15, schrieb Stefan Behnel:

> 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

Markus Feilen

unread,
Dec 15, 2009, 10:35:44 AM12/15/09
to
Vielen Dank fᅵr eure Antworten.
Ich hab mich fᅵr

x_file = (os.path.split(filename)[0], ) + \
(os.path.splitext(os.path.basename(filename)))
entschieden, da es meiner Wunschvorstellung am nᅵchsten kam.

lg Deadman44

Mirko Dziadzka

unread,
Dec 18, 2009, 10:26:05 AM12/18/09
to
Markus Feilen <markus...@arcor.de> wrote:
> 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?

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

Stefan Behnel

unread,
Dec 18, 2009, 4:07:28 PM12/18/09
to
Mirko Dziadzka, 18.12.2009 16:26:
> Markus Feilen wrote:
>> 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?
>
> Im Zweifelsfall wᅵrde ich eine eigene Funktion nehmen, die dir das Tupel

> aufbaut und es nicht inline machen.

+1, guter Tipp.

Stefan

0 new messages