Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.python > #3355

Re: boucle dans fonction récursive...

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>

Show all headers | View raw


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 | NextPrevious in thread | Find similar


Thread

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