Kopieren von Dateien

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
setiinch
User
Beiträge: 13
Registriert: Samstag 11. Februar 2017, 14:54

hallo,

hab mir ein kleinen Code geschrieben, welcher mit alle .txt Dateien anzeigen lassen und mir in ein bestimmtes Verzeichnis kopieren soll.
Allerdings kopiert er mir nur die .txt Files welche in meinem Arbeitsverzeichnis liegen und nicht alle die er ab dem Wurzelverzeichnis findet.

Code: Alles auswählen

   ziel = '/home/user/Python/temp'
    for root, dirs, files in os.walk('.'):
        for file in files:
            if file.endswith(".txt"):
                #print(os.path.abspath(".")
                print(os.path.join(root, file))
                print(os.getcwd())
                shutil.copy2(file, ziel)
hätte jem evtl eine Idee ? mfg
Zuletzt geändert von Anonymous am Sonntag 12. Februar 2017, 13:18, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

Na ja, der '.' in Zeile 2 steht in dem Kontext nun mal für das aktuelle Arbeitsverzeichnis. Wenn du etwas anderes möchtest, musst du da etwas anderes hinschreiben. Wenn du das root-Verzeichnis mit "Wurzelverzeichnis" meinst und wirklich den gesamten Verzeichnisbaum absuchen möchtest, also z.B. '/'.

Übrigens: An sich ist dafür kein eigenes Skript notwendig; das lässt sich auch in einer Zeile mit 'find' erledigen.

Code: Alles auswählen

find . -iname "*.txt" -exec cp {} /home/user/Python/temp/ ; 
setiinch
User
Beiträge: 13
Registriert: Samstag 11. Februar 2017, 14:54

Wenn ich statt dem '.' das Symbol für das Wurzelverzeichnis ' / ' ersetze erhalte ich folgenden Fehler:

IOError: [Errno 2] No such file or directory: 'bla.txt'

meine Vermutung ist das er mit relativen Pfaden beim durchsuchen und kopieren der Verzeichnisstruktur nicht klarkommt.
Wenn ich für den Kopierbefehl absolute Pfade verwende, kopiert er auch außerhalb des Arbeitsverzeichnis die Dateien ohne Problem.
Jetzt war die Idee relative Pfade in absoulute Pfade mit einem Befehl umzuwandeln .!?. und dann zu kopieren, aber das ging auch nicht ...
BlackJack

@setiinch: Du musst die Pfade halt entsprechend mit `os.path.join()` zusammensetzen. Machst Du ja auch schon für den Quellpfad, nur dass Du den einfach nur ausgibst, aber nicht im Programm verwendest.
setiinch
User
Beiträge: 13
Registriert: Samstag 11. Februar 2017, 14:54

ok Problem wie folgt gelöst:

Code: Alles auswählen

os.system('find / -name "*.py" -exec cp {} /home/user/Python/temp \;')
der os.walk ansatz wollte nicht so richtig funktionieren.. danke für die hilfe ;)
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

setiinch hat geschrieben:

Code: Alles auswählen

os.system('find / -name "*.py" -exec cp {} /home/user/Python/temp \;')
Oh, diese Verwendung war eigentlich nicht meine Intention, als ich sie vorgeschlagen habe; externe Aufrufe für Dinge, die Python selbst beherrscht, sind eher ungünstig.
Antworten