Je programme une petite routine de copie r=C3=A9cursive de fichiers qui con=
siste =C3=A0 d=C3=A9placer tous les fichiers dans une arborescence vers un =
autre endroit. Il se trouve que la boucle <for...in> a un comportement inat=
tendu: si le premier sous r=C3=A9pertoire (de premier niveau dans l'arbores=
cence) obtenu par listdir() est vide (ou devenu vide apr=C3=A8s le d=C3=A9p=
lacement de son contenu) alors il s'arr=C3=AAte, Il n'y a pas de passage =
=C3=A0 l'=C3=A9l=C3=A9ment souvent du r=C3=A9pertoire. Avez vous une explic=
ations ?
J'utilise WinPy 3.7.7. Ci dessous les lignes de codes:
import os, shutil, pathlib
def copie(dossier,rep_dest):
contenu_rep =3D os.listdir(dossier)
for elm in contenu_rep:
chemin =3D dossier + '/' + elm
if os.path.isdir(chemin):
dossier =3D chemin
copie(dossier ,rep_dest)
elif os.path.isfile(chemin) and (dossier !=3D rep_dest):
shutil.move(chemin, rep_dest)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Benoit Izac
Bonjour, Le 15/06/2020 à 22:04, a écrit dans le message :
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 # 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().
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 <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:
Bonjour, Le 15/06/2020 à 22:04, a écrit dans le message :
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 # 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().
On Monday, 15 June 2020 23:56:07 UTC+2, Benoit Izac wrote:
Bonjour,
Je programme une petite routine de copie récursive de fichiers qui consiste à déplacer tous les fichiers dans une arborescence v ers 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 d e passage à l'élément souvent du répertoire. Avez vous une ex plications ? 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é mod ifié
^^^^^^^
if os.path.isdir(chemin): dossier = chemin # <= l'erreur
^^^^^^^ Tu utilises le même nom de variable qu'au dessus donc, à la bou cle suivante, dossier n'est plus celui passé en paramètre de copie( ).
On Monday, 15 June 2020 23:56:07 UTC+2, Benoit Izac wrote:
Bonjour,
> Je programme une petite routine de copie récursive de fichiers qui
> consiste à déplacer tous les fichiers dans une arborescence v ers 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 d e passage
> à l'élément souvent du répertoire. Avez vous une ex plications ?
> 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é mod ifié
^^^^^^^
> if os.path.isdir(chemin):
> dossier = chemin # <= l'erreur
^^^^^^^
Tu utilises le même nom de variable qu'au dessus donc, à la bou cle
suivante, dossier n'est plus celui passé en paramètre de copie( ).
On Monday, 15 June 2020 23:56:07 UTC+2, Benoit Izac wrote:
Bonjour,
Je programme une petite routine de copie récursive de fichiers qui consiste à déplacer tous les fichiers dans une arborescence v ers 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 d e passage à l'élément souvent du répertoire. Avez vous une ex plications ? 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é mod ifié
^^^^^^^
if os.path.isdir(chemin): dossier = chemin # <= l'erreur
^^^^^^^ Tu utilises le même nom de variable qu'au dessus donc, à la bou cle suivante, dossier n'est plus celui passé en paramètre de copie( ).
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
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)
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)
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