@vogti: Ergänzend zu str1442: Ich würde Namen gar nicht "bekannt machen", sondern erst dort verwenden, wo sie auch wirklich gebraucht werden. Sollte das zu unübersichtlich werden, ist das oft ein gutes Zeichen dafür, dass man zu viele lokale Namen hat und eventuell die Funktion aufteilen sollte.
``pass`` in ``if``/``else``-Konstrukten ist überflüssig. Das kann man immer auch ohne ``pass`` ausdrücken. In diesem Fall kann man die ``else``-Zweige einfach weglassen.
Man sollte Wiederholungen im Quelltext vermeiden. Den Dateinamen braucht man nur einmal zusammensetzen.
Dateien, die man öffnet, sollte man auch wieder schliessen. Am besten in einem ``finally``-Block oder mit einer ``with``-Anweisung um sicher zu gehen.
Die ``while``-Schleife drückt man "pythonischer" als ``for``-Schleife über das Dateiobjekt aus. Dateien sind "iterable". Dann kann man sich auch die Abbruchbedingung mit dem ``break`` sparen. Die ``for``-Schleife endet automatisch am Dateiende.
`daten` kann man sich sparen, wenn man das Ergebnis von `split()` gleich den richtigen Namen zuweist.
Die Bedingung vor dem Aufruf von `speicher_bild()` ist sehr eigenartig geklammert. Die kann man alle weglassen, ohne dass sich etwas ändert. Dann bleibt aber immer noch der Eindruck, dass Du da etwas falsch verstehst. Es werden dort nicht `name` und `url` explizit mit ``!= ''`` verglichen, sondern nur `url`. Das macht nur deshalb keinen Unterschied weil ``if name`` im Grunde das gleiche ist wie ``if name != ''``. Zeichenketten sind "falsch" wenn sie leer sind und "wahr" sonst. Ich weiss auch nicht ob ``or`` die richtige Verknüpfung ist, denn ich hätte hier eher erwartet, das gespeichert werden soll, wenn `name` *und* `url` nicht leer sind!?
`name_bild()` hat keinen Rückgabewert, es macht also wenig Sinn das implizite `None` an `execute` zu binden.
Letztendlich sähe das Ganze dann so aus (ungetestet):
Code: Alles auswählen
def speicher_bild(name, url):
jpeg_name = os.path.join('pics1', name + '.jpg')
if not os.path.exists(jpeg_name):
urllib.urlretrieve(url, jpeg_name)
def name_bild():
with open('bilder', 'r') as datei:
for line in datei:
name, url = line.split('#!')
print name, url
if name and url:
speicher_bild(name, url)
name_bild()