String Template in Dateipfad

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
Einsiedlerkrebs
User
Beiträge: 9
Registriert: Dienstag 15. April 2008, 09:37

Hallo,
mit einer Schleife lese ich Grafiken von Webinhalten und speichere die als JPG auf die Festplatte. Dabei will ich, dass der Ordnername aus einer Variablen ausgelesen wird und der Dateiname in der Schleife hochgezählt und so die JPG immer eine fortlaufende Zahl als Dateinamen hat.

Ist wahrscheinlich etwas einfaches, aber ich sitze hier schon eine Stunde dran und bekomme das nicht gebacken.

Würde mich deswegen um Hilfe sehr freuen.

So wie es hier aussieht, funktioniert es bei mir. Wenn ich aber versuche, noch für Ordnername ein Platzhalter auszuwählen, dann bekomme ich eine Fehlermeldung, dass ein int Wert erwartet wird.

Code: Alles auswählen

        f = open("Ordnername/%i.jpg" %imagename,"wb") # Ordnername und %1.jpg sollen mit dem Wert einer Variablen ersetzt werden. 
        imagename = imagename + 1 # Hier wird das in der Schleife immer hochgezählt, um verschiedene Dateinamen zu erhalten
        f.write(response.read())
BlackJack

Es wäre besser wenn Du Quelltext zeigst der *nicht* funktioniert inklusive der kompletten Fehlermeldung.

`imagename` ist hier etwas unpassend gewählt, weil's kein Name sondern eine Zahl ist.
Einsiedlerkrebs
User
Beiträge: 9
Registriert: Dienstag 15. April 2008, 09:37

Code: Alles auswählen

import httplib
from string import Template
import re


image = raw_input("ID eingeben: ")

imagename = 1
company = 'comp'
status = 2

while image != 50:
    url = Template("http:///image/?${image}.jpg") #Adresse zur Bild-Datei
    url = url.substitute(image=image) #image wird hier mit der Variablen Image ersetzt, die bei jedem Schleifendruchgang eins hochgezöählt wird
    conn = httplib.HTTPConnection('domain.com')
    conn.request('GET',url)
    response = conn.getresponse()
    f = open("%s/%i.jpg" %image %imagename,"wb") # hier die Stelle, die Probleme macht
    imagename = imagename + 1 # Imagename wird hier hochgezählt, um bei jedem Durchgang ein anderen Dateinamen zu bekommen
    f.write(response.read())
    status = status + 2  # Statusanzeige, bei jedem Durchlauf werden 2 Prozentpunkte dazugerechnet
    print str(status) + "% fertig ..."  # Hier werden Prozente ausgegeben
    image = image + 1 #Bild-ID wird hier hochgezählt

print 'Done'
f.close()
Und die Fehlermeldung wäre diese hier:

Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\.... blablub.py", line 18, in <module>
f = open("%s/%i.jpg" %image %imagename,"wb")
TypeError: not enough arguments for format string
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

probier mal

Code: Alles auswählen

f = open("%s/%i.jpg" %(image, imagename),"wb")
Einsiedlerkrebs
User
Beiträge: 9
Registriert: Dienstag 15. April 2008, 09:37

Danke EnTeQuAk! :)
Funktioniert jetzt so.
BlackJack

Aus der ``while``-Schleife solltest Du eine ``for``-Schleife machen. Und `status` lässt sich aus `image` berechnen. Ausserdem ist es besser Dateien explizit zu schliessen. Du schliesst nur die letzte *nach* der Schleife.
Antworten