Eine Liste mit nur einem Dateitypen.

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
Tayce
User
Beiträge: 56
Registriert: Sonntag 22. April 2007, 18:26
Wohnort: München
Kontaktdaten:

Hallo erstmal.
Ich probiere mich zur Zeit ein wenig mit Python und wollte gerade versuchen ein kleines Skript zu schreiben das mir alle meine *.jpg und *.JPG s in die richtige größe umwandelt.

Im Moment bin ich schon soweit:

Code: Alles auswählen

#/usr/bin/env python
#-*- encoding: utf-8 -*-
import os
dir = os.getcwd()
files = os.listdir(dir)
Nun ist es mein Problem wie ich es schaffe diese Liste so zu verändern das nur .jpg und .JPG's drinn sind.

Könnt ihr mir helfen?
Zuletzt geändert von Tayce am Mittwoch 25. April 2007, 22:32, insgesamt 1-mal geändert.
Jabber: tayce@jaim.at
BlackJack

Man kann entweder das `glob`-Modul benutzen oder die Liste von `listdir()` filtern. Die Zeichenketten-Methoden `lower()` oder `upper()` und `endswith()` sind da sehr nützlich.
Tayce
User
Beiträge: 56
Registriert: Sonntag 22. April 2007, 18:26
Wohnort: München
Kontaktdaten:

Das mit dem endswith wäre ja klasse.
Aber bei dem versuch mit
files.endswith("*.jpg")
sagt er mir immer:
AttributeError: 'list' object has no attribute 'endswith'

Weiß jemand die Lösung?
Zuletzt geändert von Tayce am Mittwoch 25. April 2007, 22:32, insgesamt 1-mal geändert.
Jabber: tayce@jaim.at
BlackJack

Ja, die Methode gibt's nicht auf Listen sondern Zeichenketten, also auf jedem Element *in* der Liste die `os.listdir()` liefert.
Tayce
User
Beiträge: 56
Registriert: Sonntag 22. April 2007, 18:26
Wohnort: München
Kontaktdaten:

Okay ich habs geschafft:

Code: Alles auswählen

#/usr/bin/env python
#-*- encoding: utf-8 -*-
import os
from PIL import Image
jpg = [f for f in os.listdir(".") if f.lower().endswith(".jpg")]
print "Alle jpg's: ", jpg

def skalieren():
    for i in jpg:
        print "bearbeite", i
        im = Image.open(i)
        im_resized = im.resize((1280, 1024))
        im_resized.save(i)    
        print i, "bearbeitet"
skalieren()
Vielen dank für deine Hilfe..
Falls jemand das kleine Skript gebrauchen kann... Nur zu ;)
Zuletzt geändert von Tayce am Mittwoch 25. April 2007, 22:32, insgesamt 3-mal geändert.
Jabber: tayce@jaim.at
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Wenn du ``f.lower().endswith(".jpg")`` schreibst, wird auch ".JPG" und ".Jpg" etc. akzeptiert.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Tayce
User
Beiträge: 56
Registriert: Sonntag 22. April 2007, 18:26
Wohnort: München
Kontaktdaten:

cool danke...
Das war noch was was mich gestört hatte :D
Zuletzt geändert von Tayce am Mittwoch 25. April 2007, 22:32, insgesamt 1-mal geändert.
Jabber: tayce@jaim.at
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Zwei kleine Anmerkungen hätte ich an der Stelle noch.

Code: Alles auswählen

dir = os.getcwd()
1. Du überschreibst an dieser Stelle eine built-in funktion.
Nicht weiter wild da man diese in Skripten so gut wie nie verwendet.
Man sollte sich aber von vornherein angewöhnen auf sowas zu achten.

Code: Alles auswählen

jpg = [f for f in os.listdir(".") if f.lower().endswith(".jpg")]
2. Du machst von dem "current work directory" das du dir holst keinen Gebrauch sondern verwendest "." .
Somit kannst du 'dir = os.getcwd()' auch weg lassen.
Tayce
User
Beiträge: 56
Registriert: Sonntag 22. April 2007, 18:26
Wohnort: München
Kontaktdaten:

Achso ja...
Das war noch von meinem ersten Versuch übrig geblieben.
Ich werds rauslöschen.
Danke
Jabber: tayce@jaim.at
Antworten