Wie schreibe ich eine Rückruffunktion für ignore in shutil.copytree

8

Ich bin relativ neu bei Python. Ich versuche, ein Verzeichnis in ein anderes Verzeichnis zu kopieren, das die Struktur beibehält.

Ich verwende

%Vor%

Ich versuche, eine Rückruffunktion zum Ignorieren zu schreiben.

Mein Ziel ist es, eine Liste von Dateien in einer Liste zu erstellen und nur diese Dateien zu kopieren, wobei der Rest ignoriert wird. Wie übergeben wir eine Liste in die Rückruffunktion?

Ich habe eine einfache Rückruffunktion geschrieben, aber ich bekomme einen Fehler, wenn ich versuche, die copyTree-Funktion

auszuführen %Vor%     
user2434 10.08.2011, 14:43
quelle

4 Antworten

7

Die Rückgabe der Ignorierfunktion muss eine Liste von zu ignorierenden Verzeichnissen und Dateien sein. Sie geben nichts zurück, was None zurückgibt, daher erhalten Sie den Fehler TypeError: argument of type 'NoneType' is not iterable .

Hier ist ein Beispiel, das die Ordnerstruktur und die in 'copy_these' aufgeführten Dateien kopiert:

%Vor%     
jwhitlock 10.08.2011, 14:54
quelle
6

Das shuthil -Modul bietet eine ignore_patterns Funktion.

  

Diese Factory-Funktion erstellt eine Funktion, die als calltree für das ignore-Argument von copytree () verwendet werden kann. Dabei werden Dateien und Verzeichnisse ignoriert, die mit einem der bereitgestellten Glob-Style-Muster übereinstimmen.

Die Modulseite zeigt ein paar Beispiele .

    
miku 10.08.2011 14:49
quelle
0

Die ignorierende Callback-Funktion sollte eine Liste von Namen relativ zum Verzeichnis 'src' zurückgeben, die nicht kopiert werden sollten.

Ihr beispielhafter Callback gibt nichts zurück (dh keine). Dann versucht copytree, eine Liste zu erwarten, darüber zu iterieren. Da es nicht möglich ist, erhalten Sie diese Ausnahme.

    
Senko Rašić 10.08.2011 14:51
quelle
0
  

Wenn ignorieren angegeben wird, muss es eine aufrufbare sein, die als Argument das besuchte Verzeichnis erhält ... und eine Liste seines Inhalts ... Die aufrufbare Funktion muss eine Verzeichnissequenz zurückgeben und Dateinamen relativ zum aktuellen Verzeichnis ...; Diese Namen werden dann beim Kopiervorgang ignoriert.

( Dokumente )

  

Mein Ziel ist es, eine Liste von Dateien in einer Liste aufzunehmen

Probieren Sie eine anonyme Funktion ( lambda ) und ein Listenverständnis aus:

%Vor%

Beachten Sie, dass die Funktion lambda die Basisnamen der Dateien und Verzeichnisse erhält, nicht ihre vollständigen Pfade; kudos @ jwhitlock's für die Verzeichnisbehandlung.

    
Fred Foo 10.08.2011 14:58
quelle

Tags und Links