Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > fr.comp.lang.python > #3355
| From | Pierre Maurette <maurette.pierre@free.fr> |
|---|---|
| Newsgroups | fr.comp.lang.python |
| Subject | Re: boucle dans fonction récursive... |
| Date | 2020-06-16 07:15 +0200 |
| Organization | A noiseless patient Spider |
| Message-ID | <mn.81b37e463b822a5e.79899@free.fr> (permalink) |
| References | <356860d9-d583-4b5c-9248-24ea6d8ca0fdo@googlegroups.com> |
sideley@yahoo.com :
> Bonjour,
>
> 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 <for...in> 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
> if os.path.isdir(chemin):
> dossier = chemin
> copie(dossier ,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
Sans commentaire, je vous propose un bout de code:
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import os, shutil, sys
ORIG = 'U:/TEST'
DEST = 'U:/arduino/BACUPETEST'
def reverse():
"""
exit on problem or returns (bool) meaning "reverse move"
"""
cond_orig = os.path.isdir(ORIG)
cond_dest = os.path.isdir(DEST)
if cond_orig != cond_dest:
return cond_dest
else:
print("y'a comme un blème ... ")
sys.exit(0)
def mymove(source, destination):
"""
:param source: source path, assumed exists
:param destination: destination path, must not exists
"""
os.mkdir(destination)
for (nom, cheminsource, chemindestination) in [(x,
os.path.join(source,x), os.path.join(destination,x)) for x in
os.listdir(source)]:
if os.path.isdir(cheminsource):
mymove(cheminsource, chemindestination)
elif os.path.isfile(cheminsource):
shutil.move(cheminsource, chemindestination)
os.rmdir(source)
def mysiouxmove(source, destination):
"""
:param source: source path, assumed exists
:param destination: destination path, must not exists
"""
os.renames(source, destination)
if __name__ == '__main__':
if not reverse():
if os.path.isdir(DEST):
shutil.rmtree(DEST)
mymove(ORIG, DEST)
# mysiouxmove(ORIG, DEST)
else:
if os.path.isdir(ORIG):
shutil.rmtree(ORIG)
mymove(DEST, ORIG)
# mysiouxmove(DEST, ORIG)
print('\n Fait')
--
Pierre Maurette
Back to fr.comp.lang.python | Previous | Next — Previous in thread | Find similar
boucle dans fonction récursive... sideley@yahoo.com - 2020-06-15 13:04 -0700
Re: boucle dans fonction récursive... Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2020-06-15 23:56 +0200
Re: boucle dans fonction récursive... Artis Sideley <sideley@yahoo.com> - 2020-06-15 15:28 -0700
Re: boucle dans fonction récursive... Pierre Maurette <maurette.pierre@free.fr> - 2020-06-16 07:15 +0200
csiph-web