10
votes

Comment copier le répertoire avec tous les fichiers de C: \\ xxx \ yyy à c: \\ zzz \ en python

J'essaie d'utiliser "CopyTree (SRC, DST)", mais je ne pouvais pas que le dossier de destination devrait exister du tout.here vous pouvez voir le petit morceau de code que j'ai écrit:

Traceback (most recent call last):
File "C:\Documents and Settings\Administrator\workspace\MMS-Auto\copy.py", line 5, in        <module>
copy_dir('C:/crap/chrome/','C:/test/')   
File "C:\Documents and Settings\Administrator\workspace\MMS-Auto\copy.py", line 3, in copy_dir
shutil.copytree(src,dest)
File "C:\Python27\lib\shutil.py", line 174, in copytree
os.makedirs(dst)
File "C:\Python27\lib\os.py", line 157, in makedirs
mkdir(name, mode)
WindowsError: [Error 183] Cannot create a file when that file already exists:    'C:/test/'


2 commentaires

Qu'est-ce que tu veux faire? Écraser les fichiers? Laissez l'original en place si un fichier existe déjà?


serait suffisant pour simplement les copier, mais je voudrais peut-être ajouter une telle fonctionnalité plus tard sur


4 Réponses :


0
votes

Je suis sûr que cela dépend de la version exacte de Python que vous avez, mais quand j'appelle shuttil.copytree. Doc Je reçois ceci:

Copier récursivement un arborescence de répertoire à l'aide de Copy2 ().

Le répertoire de destination ne doit pas exister déjà.

xxx considère cet exemple de code plutôt que l'outil ultime.

Ceci explique l'erreur que vous obtenez. Vous pouvez probablement utiliser distutils.dir_util.copy_tree à la place.


3 commentaires

Je ne veux rien ajouter à Python lui-même, bien que si je ne pourrai pas le faire autrement, je vais y aller


Vous voulez dire que vous ne voulez pas importer aucune bibliothèque? Vous avez importé Shuttil, vous pouvez aussi bien écrire importer des distutilles .


Désolé j'ai mal interprété la documentation Python, merci ça marche ... merci encore



1
votes

regarde errno pour des erreurs éventuelles. Vous pouvez utiliser .copytree () d'abord, puis quand il y a erreur, utilisez shutil.copy

De:. http://docs.python.org/library/shutil.html#shutil.copytree

Si une ou des exceptions se produisent, une erreur est soulevée avec une liste de raisons.

Alors, vous pouvez décider quoi faire avec-le et implémenter votre code pour le gérer. xxx

environ . Copopy () : http://docs.python.org/library/shutil.html# Shuttil.copy

Copiez le fichier SRC dans le fichier ou le répertoire dst. Si DST est un répertoire, un fichier avec le même nom de base que SRC est créé (ou écrasé) dans le répertoire spécifié. Les bits d'autorisation sont copiés. SRC et DST sont Noms de chemin donnés comme chaînes.

EDIT: peut aussi regarder distutils.dir_util.copy_tree


3 commentaires

À l'intérieur de la déclaration si vous n'avez rien appelé ... Que dois-je y ajouter?


OK merci, quand même je reçois "WindowsError: [Erreur 183] Impossible de créer un fichier lorsque ce fichier existe déjà: 'C: / Test /'"


Edit: Si le fichier existe eexist , puis utilisez .Copy () , il devrait les écraser.



1
votes

J'ai un peu de travail autour de cette vérification s'il existe un répertoire du même nom à l'emplacement avant de faire la fonction shuttilis.copytree. Aussi, il ne copie que des annuaires avec une certaine générique générique. Je ne sais pas si cela est nécessaire pour répondre à la question, mais je pensais le laisser là-bas. xxx


0 commentaires

14
votes

J'ai utilisé le paquet distutils code> au plus grand succès que les autres réponses ici.

http://docs.python.org/2/distutils/apiref.html#module-distutils.dir_util p>

Le distutils.dir_util.copy_tree code> fonction fonctionne très similaire à shutl.copytree code> sauf que dir_util.copy_tree code> va simplement écraser un répertoire qui existe au lieu d'une exception. P>

Remplacer: P>

import distutils.dir_util
distutils.dir_util.copy_tree(src, dst)


0 commentaires