Brauche Hilfe bei einem Such-und-Kopier Programm

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.
pudeldestodes
User
Beiträge: 65
Registriert: Samstag 9. Juni 2007, 23:45

Ich verstehe dich nicht: Du hast eine Datei 'a.jpg'. Diese Datei wird in zwei Ordnern gefunden. Was soll er jetzt machen? Die Datei nur einmal kopieren, also nur den ersten Fund von 'a.jpg'? Oder soll er beide 'a.jpg'-Dateien, die er gefunden hat, kopieren? Die erste als a.jpg und die zweite als a1.jpg?
Ich dachte letzteres

Ich rede jetzt über diesen Code. Nein, deine Interpretation der Abläufe ist nicht ganz korrekt.

Es ist noch früh am Morgen, aber ich glaube der Code macht so oder so nicht das, was er soll. Gesucht wird nach einer Datei in #42. Dort kriegst du _alle_ Treffer als Liste. Kommt a.jpg zwei Mal vor, sind da also zwei Einträge drin. In #48 wird über diese Treffer iteriert. So weit, so gut. Also, erster Treffer, wir gehen in #48 in die Schleife rein. Die Print-Ausgabe "Gefunden in:" ist so nicht ganz richtig, gefunden haben wir das schon länger (nämlich in der Funktion, die wir in #42 aufgerufen haben). #50 zerlegt den Dateinamen in Dateiendung und Rest. Und ab #51 ist das denke ich jetzt falsch. Denn jetzt wird für den _ersten_ Treffer hundert(+1) (0-99 und '') Mal etwas angehängt und jedes Mal kopiert. Das stimmt so nicht. Der erste Treffer des Dateinamens sollte ohne eine Änderung kopiert werden, an den zweiten Treffer des Dateinamens müssen wir logischerweise etwas anhängen.

Mein Versuch (bestimmt nicht perfekt: es ist nicht sichergestellt, dass die fotoliste wieder geschlossen wird). Ich habe einen anderen Ansatz gewählt um an weitere Treffer der selben Datei Anhänge zu basteln.
SvL_Striker
User
Beiträge: 16
Registriert: Dienstag 25. November 2008, 10:42

das sieht doch richtig bombe aus^^

genauso hab ich es eigendlich zum schluss auch gedacht^^

erst alle suchen... dann alle gefundenen kopieren...

hätte er erst gesucht -> gefunden -> kopiert -> weitergesucht -> etc
wäre es ebenfalls richtig aber so ist ja ma hammermäßig xD


THX!!
pudeldestodes
User
Beiträge: 65
Registriert: Samstag 9. Juni 2007, 23:45

Eigentlich ist das nur Jens' Skript in dem ich den "Dateianhangmechanismus" verändert, sowie die Printanweisungen an eine andere Stelle geschrieben habe. Vielleicht schaust du dir beide noch einmal an um die Unterschiede zu sehen (denn die eigentliche "Suchen, Treffer durchgehen, Treffer kopieren"-Reihenfolge wurde von mir nicht geändert).
SvL_Striker
User
Beiträge: 16
Registriert: Dienstag 25. November 2008, 10:42

okay werd ich machen thx an wirklich alle^^
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

hallo!

so gehts auch ganz einfach:

Code: Alles auswählen

# -*- coding: iso-8859-15 -*-

import os, shutil

SOURCE_ROOT = r"blubb"
DEST_DIR = r"bilder"
PICTURELIST_FILE = r"bilderliste.txt"

def search(picturelist):
  found = []
  for root, dirs, files in os.walk(SOURCE_ROOT):
    found += [os.path.join(root, item) for item in picturelist if item in files]
  return found

f = open(PICTURELIST_FILE, "r")
picturelist = f.read().strip().split("\n")
f.close()
for item in search(picturelist):
  destfile = os.path.join(DEST_DIR, os.path.basename(item))
  cnt = 1
  while True:
    if not os.path.exists(destfile):
      break
    elif os.path.exists(destfile + "-" + str(cnt)):
      cnt += 1
    else:
      destfile += "-" + str(cnt)
      break
  print "Copying '%s' to '%s'" % (item, destfile)
  shutil.copyfile(item, destfile)
die 'bilderliste.txt' muss so ein format haben:

Code: Alles auswählen

bild1.jpg
bild2.png
bild3.bmp
lg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Antworten