Seite 1 von 1

Eine Liste mit nur einem Dateitypen.

Verfasst: Sonntag 22. April 2007, 18:31
von Tayce
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?

Verfasst: Sonntag 22. April 2007, 18:37
von 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.

Verfasst: Sonntag 22. April 2007, 20:40
von Tayce
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?

Verfasst: Sonntag 22. April 2007, 21:01
von BlackJack
Ja, die Methode gibt's nicht auf Listen sondern Zeichenketten, also auf jedem Element *in* der Liste die `os.listdir()` liefert.

Verfasst: Montag 23. April 2007, 14:52
von Tayce
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 ;)

Verfasst: Montag 23. April 2007, 17:16
von birkenfeld
Wenn du ``f.lower().endswith(".jpg")`` schreibst, wird auch ".JPG" und ".Jpg" etc. akzeptiert.

Verfasst: Montag 23. April 2007, 18:23
von Tayce
cool danke...
Das war noch was was mich gestört hatte :D

Verfasst: Montag 23. April 2007, 19:49
von Zap
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.

Verfasst: Montag 23. April 2007, 20:14
von Tayce
Achso ja...
Das war noch von meinem ersten Versuch übrig geblieben.
Ich werds rauslöschen.
Danke