Vereinfachung von Kopier-Funktion / Alternativen?

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
The Bang 2
User
Beiträge: 14
Registriert: Montag 11. März 2013, 12:30

Guten Abend zusammen,

ich schreibe hier gerade an einer Funktion die es mir ermöglicht den Inhalt eines Ordners in einen anderen zu kopieren. Das Ganze funktioniert soweit, allerdings erscheint mir meine Variante mit der Unterscheidung von Ordner und Datei bei jedem Vorgang sehr umständlich. Ist euch hier eine einfachere Lösung bekannt? Ich bin noch neu in der Programmiererei und versuche mich etwas einzuarbeiten :)

Code: Alles auswählen

def copy(path_to_copy_from, path_to_copy_to):
#
#Kopiert alle Ordner und Dateien von von "path_to_copy_from" nach "path_to_copy_to"
#
    print ('Kopiere ' + path_to_copy_from + ' nach ' + path_to_copy_to)
    for name in os.listdir(path_to_copy_from):
        try:
            data_now = os.path.join(path_to_copy_from, name)
            if os.path.isdir(data_now):
                data_in =  os.path.join(path_to_copy_from, name)
                data_out = os.path.join(path_to_copy_to, name)
                shutil.copytree(data_in, data_out)
            else:
                data_in =  os.path.join(path_to_copy_from, name)
                data_out = os.path.join(path_to_copy_to, name)
                shutil.copy(data_in, data_out)
        except shutil.Error as error:
            print ('Ein Fehler ist aufgetreten: ' + e)
BlackJack

@The Bang 2: Man kann zumindest mal den gemeinsamen Code aus den beiden Zweigen heraus ziehen und nicht den gleichen Wert zweimal berechnen und an unterschiedliche Namen binden.

Edit: Ungetestet:

Code: Alles auswählen

def copy(path_to_copy_from, path_to_copy_to):
    """Kopiert alle Ordner und Dateien von von `path_to_copy_from` nach 
    `path_to_copy_to`.
    """
    print('Kopiere', path_to_copy_from, 'nach', path_to_copy_to)
    for name in os.listdir(path_to_copy_from):
        try:
            source = os.path.join(path_to_copy_from, name)
            (shutil.copytree if os.path.isdir(source) else shutil.copy)(
                source, os.path.join(path_to_copy_to, name)
            )
        except shutil.Error as error:
            print('Ein Fehler ist aufgetreten:', error)
The Bang 2
User
Beiträge: 14
Registriert: Montag 11. März 2013, 12:30

Da hast du Recht, vielen Dank. :)
Antworten