splitext - Problem

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
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

Hallo Leute,

ich möchte alle Dateien eines Ordners einlesen und dann die Dateiendungen per sliptext abtrennen. Hierzu versuche ich Folgendes, um die Liste anschließend per Bottle in ein Template zu füllen:

Code: Alles auswählen

	for filename in os.walk("bilder"):
		images = os.path.splitext(filename)[0]
		
	return template('template', images=images)
Leider funktioniert das bisher nicht, ich erhalte die Meldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/bottle.py", line 499, in handle
    return handler(**args)
  File "galerie.py", line 8, in index
    images = os.path.splitext(filename)[0]
  File "/usr/lib/python2.6/posixpath.py", line 95, in splitext
    return genericpath._splitext(p, sep, altsep, extsep)
  File "/usr/lib/python2.6/genericpath.py", line 91, in _splitext
    sepIndex = p.rfind(sep)
AttributeError: 'tuple' object has no attribute 'rfind'
Es wäre toll, wenn mir jemand gedanklich kurz auf den rechten Weg helfen würde. :)

Grüße
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

Mach da mal ein 'print' rein, und schau dir an, was 'os.walk' zurückgibt (oder schau in die Documentation).
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

Mit einem print bricht er leider trotzdem sofort mit der selben Fehlermeldung ab.

Grüße
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

orschiro hat geschrieben:Mit einem print bricht er leider trotzdem sofort mit der selben Fehlermeldung ab.
Du musst das print auch davor schreiben ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

Das meinte ich ja. ;)

Code: Alles auswählen

robert@thinkpad ~/Webseiten/kunst.ziesche.de $ python test.py
('bilder', [], ['BZ Kunst 94 Landschaft 17.jpg', 'BZ Kunst 54 irgendwas war anders nach King Crimson.jpg', 'BZ Kunst 58 Landschaft 04.jpg', 'BZ Kunst 21 Der Clown 01.jpg', 'BZ Kunst 56 verletztet Hund.jpg', 'Zi 1976 ziellos.jpg', 'Zi lustiger Elefant.jpg', 'BZ Kunst 08 Tr\xc3\xa4umer 07.jpg', 'BZ Kunst 52 irgendwas nach King Crimson.jpg', 'BZ Kunst 51 irgendwas nach King Crimson.jpg', 'BZ Kunst 48 Einzeller beim Turterln.jpg', 'IMG_4382.JPG', 'Zi Beim fruchtigen Gl\xc3\xa4schen.jpg', 'BZ Kunst 65 Ort der Gewalt.jpg', 'BZ Kunst 41 Spiel im Wasser.jpg', 'Zi Neid.jpg', 'IMG_4375.JPG', 'BZ Kunst 84 Der Gitarrist.jpg', 'BZ Kunst 75 Portrait.jpg', 'BZ Kunst 71 zur Frau mit Vogel 3.jpg', 'BZ Kunst 58 Landschaft 09.jpg', 'BZ Kunst 38 verkleidet.jpg', 'Zi Versuchung.jpg'])
Traceback (most recent call last):
  File "test.py", line 5, in <module>
    images = os.path.splitext(filename)[0]
  File "/usr/lib/python2.6/posixpath.py", line 95, in splitext
    return genericpath._splitext(p, sep, altsep, extsep)
  File "/usr/lib/python2.6/genericpath.py", line 91, in _splitext
    sepIndex = p.rfind(sep)
AttributeError: 'tuple' object has no attribute 'rfind'

Code: Alles auswählen

import os
for filename in os.walk("bilder"):
	print filename
	images = os.path.splitext(filename)[0]
	print images
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Das ist also die Struktur von "filename" (wie man sieht, passt der Name nicht).

Code: Alles auswählen

('bilder', [], ['BZ Kunst 94 Landschaft 17.jpg', 'BZ Kunst 54 irgendwas war anders nach King Crimson.jpg', 'BZ Kunst 58 Landschaft 04.jpg', 'BZ Kunst 21 Der Clown 01.jpg', 'BZ Kunst 56 verletztet Hund.jpg', 'Zi 1976 ziellos.jpg', 'Zi lustiger Elefant.jpg', 'BZ Kunst 08 Tr\xc3\xa4umer 07.jpg', 'BZ Kunst 52 irgendwas nach King Crimson.jpg', 'BZ Kunst 51 irgendwas nach King Crimson.jpg', 'BZ Kunst 48 Einzeller beim Turterln.jpg', 'IMG_4382.JPG', 'Zi Beim fruchtigen Gl\xc3\xa4schen.jpg', 'BZ Kunst 65 Ort der Gewalt.jpg', 'BZ Kunst 41 Spiel im Wasser.jpg', 'Zi Neid.jpg', 'IMG_4375.JPG', 'BZ Kunst 84 Der Gitarrist.jpg', 'BZ Kunst 75 Portrait.jpg', 'BZ Kunst 71 zur Frau mit Vogel 3.jpg', 'BZ Kunst 58 Landschaft 09.jpg', 'BZ Kunst 38 verkleidet.jpg', 'Zi Versuchung.jpg'])
Um was für ein Objekt handelt es sich also? :wink:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

Was genau meinst du mit Objekt?

Grüße
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

orschiro hat geschrieben:Was genau meinst du mit Objekt?
Das an "filename" gebundene und grad von mir zitierte :!:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Hyperion fragt nach dem Typ des Objekts. In Python bedeutet "Typ eines Objekts" das gleiche wie "Klasse eines Objekts":

Code: Alles auswählen

>>> type(42)
<type 'int'>
>>> (42).__class__
<type 'int'>
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

Ich hoffe, ich verstehe dich richtig. :oops:

In dem Ordner sind ausschließlich jpg-Bilder, deren Dateiendung ich abtrennen möchte.

War es das, was du wissen wolltest?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Und in der Fehlermeldung ist die Klasse ja auch schon vom Interpreter angegeben (letzte Zeile) :!:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

orschiro hat geschrieben: War es das, was du wissen wolltest?
Nein. Siehe auch meine beiden Postings und das von derdon.

Edit: Um es noch mal zu präszisieren: Ich weiß bereits, um welchen Typen es sich handelt; ich möchte Dich halt gerne darauf stoßen. Du sollst eben selber drauf kommen - dann kapierst Du nämlich auch die Fehlermeldung. Damit wirst Du dann auch das Problem lösen können (was ein Blick in die Doku iirc auch schon tun sollte) und vor allem in Zukunft bei dieser Meldung wissen, was Du prüfen musst.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten