2015-09-02 1 views
-2

J'ai étudié les questions posées de manière similaire sans l'emporter. J'essaie d'os.walk() une arborescence de fichiers copiant un ensemble de fichiers dans chaque répertoire. Les fichiers individuels semblent copier ok (1ère itération atleast), mais une erreur est levée (IOError: [Errno 13] Autorisation refusée: 'S:/NoahFolder \ .images') en essayant de copier un dossier (.images) et son contenu ? J'ai plein de permissions sur ce dossier (je crois).Errno 13 Autorisation refusée

Ce qui donne?

import os 
import shutil 
import glob 

dir_src = r'S:/NoahFolder/.*' 
dir_dst = r'E:/Easements/Lynn' 
src_files = glob.glob(dir_src) 
print src_files 

for path,dirname,files in os.walk(dir_dst): 
    for item in src_files: 
     print path 
     print item 

     shutil.copy(item, path) 
+1

@CodyBouche ils ressemblent à des chemins de fichiers Windows, et dire à quelqu'un de «chmod 777» aveuglément est un mauvais conseil. –

+0

@Noah créer un exemple plus petit. Pouvez-vous utiliser 'shutil.copy' pour copier un seul élément hors du répertoire problématique? –

+2

Si vous obtenez une erreur «Autorisation refusée», il est raisonnable de conclure que vous n'avez pas «les autorisations complètes sur ce dossier». – msw

Répondre

1

shutil.copy ne fera que copier des fichiers, pas les répertoires. Pensez à utiliser shutil.copytree à la place, c'est ce à quoi il a été conçu.

+0

Votre réponse semble se rapprocher. J'ai testé en utilisant try/attend et peut placer avec succès des fichiers en dehors du sous-dossier mais pas de chance avec sous-dossier? Lorsqu'il est exécuté sans commentaire, l'appel shutil.copytree renvoie cette erreur: [Erreur 183] Impossible de créer un fichier lorsque ce fichier existe déjà. 'pour le chemin, dirname, les fichiers os.walk (dir_dst): pour objet src_files: essayer: shutil.copy (point, chemin) sauf: élément d'impression chemin d'impression # de shutil.copytree (article , path) ' –

+0

Peut-être que vous essayez de copier des fichiers que' copytree' a déjà créés pour vous, en continuant à parcourir les répertoires que vous avez déjà traités? – holdenweb

0

Cette implémentation de copytree semblait l'avoir fait! Merci pour l'entrée @ holdenweb