Brauche Hilfe bei einem Such-und-Kopier Programm
-
- User
- Beiträge: 16
- Registriert: Dienstag 25. November 2008, 10:42
Brauche Hilfe bei einem Such-und-Kopier Programm
Guten Tag an Alle
Ich bin Azubi Fachinformatiker im ersten Lehrjahr und habe ein folgendes Problem.
Ich soll in einem Verzeichnis in dem 16 Ordner sind insgesamt 451 Bilddateien finden und in ein bestimmten Verzeichnis kopieren.
Mir wurde empfohlen dafür eine Batch-Datei zu schreiben.
Habe jetzt 2,5 Stunden gesucht und trotzdem nicht hilfreiches gefunden.
Die Dateien sind in einer txt-Datei aufgelistet.
Ich habe mir auchscon einen Ablaufplan für das Programm überlegt.
Dieses lautet wiefolgt:
-erste Zeile der txt-Datei als zeichenabfolge in variable speichern
--im ausgangsverzeichnis in den ersten ordner navigieren
---vergleich von der variable mit den vorhandenen Dateien
----gefunden: -> datei kopieren in ein festgelegtes Verzeichnis
nicht gefunden: -> aus dem Ordner raus und in den 2. Ordner
------------------------------(dies solange bis entweder die Datei gefunden
wurde oder alle 16 Ordner durchsucht worden sind)--------------------------
-zweite Zeile der txt-Datei als zeichenabfolge in variable speichern
------------------------(gleichen ablauf von suchen + kopieren)---------------
-solange die nächste zeile der txt-Datei in der variable speichern, bis die zeile keine zeichenfolge mehr enthält
(leere Zeile / ende der gesuchten Dateien)
Es wäre wirklich super, wenn man mir einige Tipps geben könnte, ob und wie soetwas zu realisieren ist.
MfG
SvL_Striker
Ich bin Azubi Fachinformatiker im ersten Lehrjahr und habe ein folgendes Problem.
Ich soll in einem Verzeichnis in dem 16 Ordner sind insgesamt 451 Bilddateien finden und in ein bestimmten Verzeichnis kopieren.
Mir wurde empfohlen dafür eine Batch-Datei zu schreiben.
Habe jetzt 2,5 Stunden gesucht und trotzdem nicht hilfreiches gefunden.
Die Dateien sind in einer txt-Datei aufgelistet.
Ich habe mir auchscon einen Ablaufplan für das Programm überlegt.
Dieses lautet wiefolgt:
-erste Zeile der txt-Datei als zeichenabfolge in variable speichern
--im ausgangsverzeichnis in den ersten ordner navigieren
---vergleich von der variable mit den vorhandenen Dateien
----gefunden: -> datei kopieren in ein festgelegtes Verzeichnis
nicht gefunden: -> aus dem Ordner raus und in den 2. Ordner
------------------------------(dies solange bis entweder die Datei gefunden
wurde oder alle 16 Ordner durchsucht worden sind)--------------------------
-zweite Zeile der txt-Datei als zeichenabfolge in variable speichern
------------------------(gleichen ablauf von suchen + kopieren)---------------
-solange die nächste zeile der txt-Datei in der variable speichern, bis die zeile keine zeichenfolge mehr enthält
(leere Zeile / ende der gesuchten Dateien)
Es wäre wirklich super, wenn man mir einige Tipps geben könnte, ob und wie soetwas zu realisieren ist.
MfG
SvL_Striker
- jens
- Moderator
- Beiträge: 8458
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
So sieht man sich wieder
ungetestet:

ungetestet:
Code: Alles auswählen
# -*- coding: utf-8 -*-
import os, shutil
SOURCE_DIRS = (
"Verzeichnis1",
"Verzeichnis2",
"Verzeichnis3",
)
DEST_DIR = "AusgangsVerz"
TXT_FILENAME = "Bilderliste.txt"
def find_file(filename):
for dir in SOURCE_DIRS:
abs_path = os.path.join(dir, filename)
if os.path.isfile(abs_path):
return abs_path
f = file(TXT_FILENAME, "r")
for filename in f:
print "Datei:", filename
dir = find_file(filename)
if abs_path:
print "Gefunden in:", abs_path
else:
print "Datei nicht gefunden!"
continue
print "kopiere..."
shutil.copyfile(abs_path, DEST_DIR)
CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
-
- User
- Beiträge: 16
- Registriert: Dienstag 25. November 2008, 10:42
- jens
- Moderator
- Beiträge: 8458
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Fehler von mir, tausch mal:
durch:
Code: Alles auswählen
dir = find_file(filename)
durch:
Code: Alles auswählen
abs_path = find_file(filename)
CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
-
- User
- Beiträge: 16
- Registriert: Dienstag 25. November 2008, 10:42
hmm er läuft jetzt zwar durch, such auch nach jeder einzelnen bilddatei, die in der liste steht, findet aber keine einzige davon...
Datei: 1I01856_204G-2C01730_20K-I-1.jpg;
Datei nicht gefunden!
Datei: 1I01856_204G-2C01730_20K-I-2.jpg;
Datei nicht gefunden!
... etc
kann es sein, dass er nur imersten der ordner nachsucht?
oder, dass ich evtl den pfad falsch eingegeben habe?....
Datei: 1I01856_204G-2C01730_20K-I-1.jpg;
Datei nicht gefunden!
Datei: 1I01856_204G-2C01730_20K-I-2.jpg;
Datei nicht gefunden!
... etc
kann es sein, dass er nur imersten der ordner nachsucht?
oder, dass ich evtl den pfad falsch eingegeben habe?....
- jens
- Moderator
- Beiträge: 8458
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Kann schon sein. Kannst ja mal abs_path in find_file() ausgeben lassen.
Es kommt bei SOURCE_DIRS auch darauf an, ob du einen relativen Pfad angegeben hast oder ein absoluten. Wenn er relativ ist, dann ist es relativ zum aktuellen Verzeichnis und das wird wohl das Verzeichnis sein, wo du das Skript startes... Kann man sich aufgeben lassen mit print os.getcwd()
Es kommt bei SOURCE_DIRS auch darauf an, ob du einen relativen Pfad angegeben hast oder ein absoluten. Wenn er relativ ist, dann ist es relativ zum aktuellen Verzeichnis und das wird wohl das Verzeichnis sein, wo du das Skript startes... Kann man sich aufgeben lassen mit print os.getcwd()
CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
-
- User
- Beiträge: 16
- Registriert: Dienstag 25. November 2008, 10:42
habe für dafür das eingegeben:
SOURCE_DIRS = (
"V:\2\C\68.31.5-05-105480",
"V:\2\C\68.31.5-05-106337",
"V:\2\C\68.31.5-05-106643",
"V:\2\C\68.31.5-05-107359",
"V:\2\C\68.31.5-05-110265",
"V:\2\C\68.31.5-07-152387",
"V:\2\C\68.31.5-07-153385",
"V:\2\C\68.31.5-07-155980",
"V:\2\C\68.31.5-07-157874",
"V:\2\C\68.31.5-07-160836",
"V:\2\C\68.31.5-08-167004",
"V:\2\C\68.31.5-08-167720",
"V:\2\C\68.31.5-08-171877",
"V:\2\C\68.31.5-08-172335",
"V:\2\C\68.31.5-08-177228",
"V:\2\C\68.31.5-08-183977",
)
ist halt der pfad von den ordnern...
und die funktion print os.getcwd() gibt mir den pfad zum dekstop aus wo das programm ist...
muss ich evtl die datei in den pfad "V:\2\C\" ausführen (bzw dahin kopieren und dort ausführen?
SOURCE_DIRS = (
"V:\2\C\68.31.5-05-105480",
"V:\2\C\68.31.5-05-106337",
"V:\2\C\68.31.5-05-106643",
"V:\2\C\68.31.5-05-107359",
"V:\2\C\68.31.5-05-110265",
"V:\2\C\68.31.5-07-152387",
"V:\2\C\68.31.5-07-153385",
"V:\2\C\68.31.5-07-155980",
"V:\2\C\68.31.5-07-157874",
"V:\2\C\68.31.5-07-160836",
"V:\2\C\68.31.5-08-167004",
"V:\2\C\68.31.5-08-167720",
"V:\2\C\68.31.5-08-171877",
"V:\2\C\68.31.5-08-172335",
"V:\2\C\68.31.5-08-177228",
"V:\2\C\68.31.5-08-183977",
)
ist halt der pfad von den ordnern...
und die funktion print os.getcwd() gibt mir den pfad zum dekstop aus wo das programm ist...
muss ich evtl die datei in den pfad "V:\2\C\" ausführen (bzw dahin kopieren und dort ausführen?
-
- User
- Beiträge: 424
- Registriert: Montag 28. Juli 2003, 16:19
- Wohnort: /dev/reality
schau dir mal fsl an : File Selection Language
könnte für dich und die Aufgabe genau das richtige sein
könnte für dich und die Aufgabe genau das richtige sein
Außerdem sind die SOURCE_DIRS nicht als rawstrings definiert und damit wird \ als Escape-character interpretiert.
Code: Alles auswählen
SOURCE_DIRS = (
r"V:\2\C\68.31.5-05-105480",
r"V:\2\C\68.31.5-05-106337",
r"V:\2\C\68.31.5-05-106643",
r"V:\2\C\68.31.5-05-107359",
r"V:\2\C\68.31.5-05-110265",
r"V:\2\C\68.31.5-07-152387",
r"V:\2\C\68.31.5-07-153385",
r"V:\2\C\68.31.5-07-155980",
r"V:\2\C\68.31.5-07-157874",
r"V:\2\C\68.31.5-07-160836",
r"V:\2\C\68.31.5-08-167004",
r"V:\2\C\68.31.5-08-167720",
r"V:\2\C\68.31.5-08-171877",
r"V:\2\C\68.31.5-08-172335",
r"V:\2\C\68.31.5-08-177228",
r"V:\2\C\68.31.5-08-183977",
)
-
- User
- Beiträge: 16
- Registriert: Dienstag 25. November 2008, 10:42
@tordmor habe es umgeändert... leider belibt das ergebnis genauso ungeändert xD...
@BlackJack ja ist mir nach meinem post auch aufgefallen xD
hab jetzt alle 451x das "V:\2\C\" rausgelöscht (in der fotoliste.txt)...
jetzt stimmen zumindest bei der ausgabe die datei-namen...
findet sie aber trotzdem nicht...
print os.getcwd() gibt den pfad zum skript aus... ist das richtig?
bei "print abs_path" gibt er "None" aus...
heist das hier könnte mein fehler sein weil er dann den zu durchsuchenden pfad nicht findet? bzw keinen angegeben hat?
jetzt schonmal ein großes THX an alle... und sry dass ich so nerve...
ich poste am besten nochmal das ganze programm rein... vllt ist das aufschlussreicher als meine beschreibungen xD
CODE:
# -*- coding: utf-8 -*-
import os, shutil
SOURCE_DIRS = (
r"V:\2\C\68.31.5-05-105480",
r"V:\2\C\68.31.5-05-106337",
r"V:\2\C\68.31.5-05-106643",
r"V:\2\C\68.31.5-05-107359",
r"V:\2\C\68.31.5-05-110265",
r"V:\2\C\68.31.5-07-152387",
r"V:\2\C\68.31.5-07-153385",
r"V:\2\C\68.31.5-07-155980",
r"V:\2\C\68.31.5-07-157874",
r"V:\2\C\68.31.5-07-160836",
r"V:\2\C\68.31.5-08-167004",
r"V:\2\C\68.31.5-08-167720",
r"V:\2\C\68.31.5-08-171877",
r"V:\2\C\68.31.5-08-172335",
r"V:\2\C\68.31.5-08-177228",
r"V:\2\C\68.31.5-08-183977",
)
DEST_DIR = "C:\gesuchte Bilder"
TXT_FILENAME = "Fotoliste2.txt"
print os.getcwd()
def find_file(abs_path):
for dir in SOURCE_DIRS:
abs_path = os.path.join(dir, filename)
if os.path.isfile(abs_path):
return abs_path
f = file(TXT_FILENAME, "r")
for filename in f:
print "Datei:", filename
abs_path = find_file(filename)
if abs_path:
print "Gefunden in:", abs_path
else:
print "Datei nicht gefunden!"
print abs_path
continue
print "kopiere..."
shutil.copyfile(abs_path, DEST_DIR)
AUSGABE:
C:\Dokumente und Einstellungen\Wesp\Desktop
Datei: 1I01856_204G-2C01730_20K-I-1.jpg;
Datei nicht gefunden!
None
Datei: 1I01856_204G-2C01730_20K-I-2.jpg;
Datei nicht gefunden!
None
...............etc...................
hoffe das ist ein wenig einleuchtender...
@BlackJack ja ist mir nach meinem post auch aufgefallen xD
hab jetzt alle 451x das "V:\2\C\" rausgelöscht (in der fotoliste.txt)...
jetzt stimmen zumindest bei der ausgabe die datei-namen...
findet sie aber trotzdem nicht...
print os.getcwd() gibt den pfad zum skript aus... ist das richtig?
bei "print abs_path" gibt er "None" aus...
heist das hier könnte mein fehler sein weil er dann den zu durchsuchenden pfad nicht findet? bzw keinen angegeben hat?
jetzt schonmal ein großes THX an alle... und sry dass ich so nerve...
ich poste am besten nochmal das ganze programm rein... vllt ist das aufschlussreicher als meine beschreibungen xD
CODE:
# -*- coding: utf-8 -*-
import os, shutil
SOURCE_DIRS = (
r"V:\2\C\68.31.5-05-105480",
r"V:\2\C\68.31.5-05-106337",
r"V:\2\C\68.31.5-05-106643",
r"V:\2\C\68.31.5-05-107359",
r"V:\2\C\68.31.5-05-110265",
r"V:\2\C\68.31.5-07-152387",
r"V:\2\C\68.31.5-07-153385",
r"V:\2\C\68.31.5-07-155980",
r"V:\2\C\68.31.5-07-157874",
r"V:\2\C\68.31.5-07-160836",
r"V:\2\C\68.31.5-08-167004",
r"V:\2\C\68.31.5-08-167720",
r"V:\2\C\68.31.5-08-171877",
r"V:\2\C\68.31.5-08-172335",
r"V:\2\C\68.31.5-08-177228",
r"V:\2\C\68.31.5-08-183977",
)
DEST_DIR = "C:\gesuchte Bilder"
TXT_FILENAME = "Fotoliste2.txt"
print os.getcwd()
def find_file(abs_path):
for dir in SOURCE_DIRS:
abs_path = os.path.join(dir, filename)
if os.path.isfile(abs_path):
return abs_path
f = file(TXT_FILENAME, "r")
for filename in f:
print "Datei:", filename
abs_path = find_file(filename)
if abs_path:
print "Gefunden in:", abs_path
else:
print "Datei nicht gefunden!"
print abs_path
continue
print "kopiere..."
shutil.copyfile(abs_path, DEST_DIR)
AUSGABE:
C:\Dokumente und Einstellungen\Wesp\Desktop
Datei: 1I01856_204G-2C01730_20K-I-1.jpg;
Datei nicht gefunden!
None
Datei: 1I01856_204G-2C01730_20K-I-2.jpg;
Datei nicht gefunden!
None
...............etc...................
hoffe das ist ein wenig einleuchtender...
- jens
- Moderator
- Beiträge: 8458
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
SvL_Striker hat geschrieben:...
AUSGABE:
C:\Dokumente und Einstellungen\Wesp\Desktop
Datei: 1I01856_204G-2C01730_20K-I-1.jpg;
Datei nicht gefunden!
...
BlackJack hat recht. In der Fotoliste2.txt Datei werden offensichtlich alle Dateinamen mit einem ";" abgeschlossen. Python sucht also nach 1I01856_204G-2C01730_20K-I-1.jpg;
Also Semikolon aus Textdatei löschen, oder satt:
Code: Alles auswählen
...
for filename in f:
print "Datei:", filename
...
das nehmen:
Code: Alles auswählen
...
for filename in f:
filename = filename.strip(" ;")
print "Datei:", filename
...
(Löscht hinten und vorn Leerzeichen und Semikolon)
bzw. Code so einfügen: http://www.python-forum.de/faq.php#21
CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
-
- User
- Beiträge: 16
- Registriert: Dienstag 25. November 2008, 10:42
so hab das mit dem semikolon aus der txt-datei gelöscht und zur sicherheit die zeile von jens auchnoch eingefügt...
neue ausgabe ist:
---------------------------------------------------------
C:\Dokumente und Einstellungen\Wesp\Desktop
Datei: 1I01856_204G-2C01730_20K-I-1.jpg
Datei nicht gefunden!
None
Datei: 1I01856_204G-2C01730_20K-I-2.jpg
Datei nicht gefunden!
None
---etc---
---------------------------------------------------------
soll ich hier evtl auch ein r davor setzten?
mich stört es irgendwie, dass er bei None ausgibt... könnte es daran liegen, dass er die dateien nicht findet?
neue ausgabe ist:
---------------------------------------------------------
C:\Dokumente und Einstellungen\Wesp\Desktop
Datei: 1I01856_204G-2C01730_20K-I-1.jpg
Datei nicht gefunden!
None
Datei: 1I01856_204G-2C01730_20K-I-2.jpg
Datei nicht gefunden!
None
---etc---
---------------------------------------------------------
Code: Alles auswählen
# -*- coding: utf-8 -*-
import os, shutil
SOURCE_DIRS = (
r"V:\2\C\68.31.5-05-105480",
r"V:\2\C\68.31.5-05-106337",
r"V:\2\C\68.31.5-05-106643",
r"V:\2\C\68.31.5-05-107359",
r"V:\2\C\68.31.5-05-110265",
r"V:\2\C\68.31.5-07-152387",
r"V:\2\C\68.31.5-07-153385",
r"V:\2\C\68.31.5-07-155980",
r"V:\2\C\68.31.5-07-157874",
r"V:\2\C\68.31.5-07-160836",
r"V:\2\C\68.31.5-08-167004",
r"V:\2\C\68.31.5-08-167720",
r"V:\2\C\68.31.5-08-171877",
r"V:\2\C\68.31.5-08-172335",
r"V:\2\C\68.31.5-08-177228",
r"V:\2\C\68.31.5-08-183977",
)
DEST_DIR = "C:\gesuchte Bilder"
TXT_FILENAME = "Fotoliste2.txt"
print os.getcwd()
def find_file(abs_path):
for dir in SOURCE_DIRS:
abs_path = os.path.join(dir, filename)
if os.path.isfile(abs_path):
return abs_path
f = file(TXT_FILENAME, "r")
for filename in f:
filename = filename.strip(" ;")
print "Datei:", filename
abs_path = find_file(filename)
if abs_path:
print "Gefunden in:"
else:
print "Datei nicht gefunden!"
print abs_path
continue
print "kopiere..."
shutil.copyfile(abs_path, DEST_DIR)
Code: Alles auswählen
DEST_DIR = "C:\gesuchte Bilder"
soll ich hier evtl auch ein r davor setzten?
mich stört es irgendwie, dass er bei
Code: Alles auswählen
print abs_path
- jens
- Moderator
- Beiträge: 8458
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Du solltest auch die Ausgabe in die find_file() funktion rein packen, vor dem if
CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
-
- User
- Beiträge: 16
- Registriert: Dienstag 25. November 2008, 10:42
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder