Path: csiph.com!aioe.org!news.gegeweb.eu!gegeweb.org!news.ortolo.eu!news.izac.org!reader From: Benoit Izac Newsgroups: fr.comp.lang.python Subject: Re: boucle dans fonction =?iso-8859-1?Q?r=E9cursive=2E=2E=2E?= Date: Mon, 15 Jun 2020 23:56:06 +0200 Message-ID: <87v9js9eo9.fsf@izac.org> References: <356860d9-d583-4b5c-9248-24ea6d8ca0fdo@googlegroups.com> Reply-To: benoit.izac@free.fr Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Injection-Info: keg.izac.org; logging-data="5564"; mail-complaints-to="usenet@izac.org" Xref: csiph.com fr.comp.lang.python:3353 Bonjour, Le 15/06/2020 à 22:04, sideley@yahoo.com a écrit dans le message <356860d9-d583-4b5c-9248-24ea6d8ca0fdo@googlegroups.com> : > Je programme une petite routine de copie récursive de fichiers qui > consiste à déplacer tous les fichiers dans une arborescence vers un > autre endroit. Il se trouve que la boucle a un comportement > inattendu: si le premier sous répertoire (de premier niveau dans > l'arborescence) obtenu par listdir() est vide (ou devenu vide après le > déplacement de son contenu) alors il s'arrête, Il n'y a pas de passage > à l'élément souvent du répertoire. Avez vous une explications ? > J'utilise WinPy 3.7.7. Ci dessous les lignes de codes: > > import os, shutil, pathlib > def copie(dossier,rep_dest): ^^^^^^^ > contenu_rep = os.listdir(dossier) > for elm in contenu_rep: > chemin = dossier + '/' + elm # dossier a été modifié ^^^^^^^ > if os.path.isdir(chemin): > dossier = chemin # <= l'erreur ^^^^^^^ Tu utilises le même nom de variable qu'au dessus donc, à la boucle suivante, dossier n'est plus celui passé en paramètre de copie(). > copie(dossier ,rep_dest) copie(chemin, rep_dest) > elif os.path.isfile(chemin) and (dossier != rep_dest): > shutil.move(chemin, rep_dest) > > def prog (): > dossier = input('Entrez le répertoire à scanner ') > rep_dest = input('Rép destinataire ? ') > copie(dossier,rep_dest) > print ('\n Fait') > return 1 -- Benoit Izac