2015-09-02 4 views
-2

Я исследовал аналогично заданные вопросы без превалирования. Я пытаюсь os.walk() дерево файлов, копируя набор файлов в каждый каталог. Отдельные файлы, похоже, скопированы в порядке (первая итерация по крайней мере), но возникает ошибка (IOError: [Errno 13] Permission denied: 'S:/NoahFolder \ .images') при попытке скопировать папку (.images) и ее содержимое ? У меня есть полные разрешения для этой папки (я считаю).Errno 13 Разрешение отклонено

Что дает?

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 это похоже на пути к файлам Windows и сообщение кому-то слепому «chmod 777» - это плохой совет. –

+0

@Noah создать меньший пример. Можете ли вы использовать 'shutil.copy' для копирования одного элемента из проблемного каталога? –

+2

Если вы получаете ошибку «Отказано в разрешении», то разумно безопасно заключить, что у вас нет «полных прав на эту папку». – msw

ответ

1

shutil.copy будет копировать только файлы, а не каталоги. Подумайте, вместо этого используйте shutil.copytree, вот для чего он предназначен.

+0

Ваш ответ кажется близок. Я тестировал с помощью try/expect и мог успешно размещать файлы вне подпапки, но не повезло с вложенной папкой? При запуске без комментариев вызов shutil.copytree вызывает эту ошибку: [Ошибка 183] Невозможно создать файл, если этот файл уже существует. 'для пути, имени папки, файлы в os.walk (dir_dst): для элемента src_files: попробовать: shutil.copy (пункт, путь) исключение: пункта печати печать пути # shutil.copytree (пункт , path) ' –

+0

Возможно, вы пытаетесь скопировать файлы, которые' copytree' уже создали для вас, продолжая спускаться по каталогам, которые вы уже обработали? – holdenweb

0

Эта реализация copytree, казалось, сделала это! Спасибо за вход @ holdenweb

from distutils.dir_util import copy_tree 

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

    for item in src_files: 
     try: 
      shutil.copy(item, path) 
     except: 
      print item 
      print path 
      copy_tree(dir_src, path)