@aab137

PermissionError: [Errno 13] Permission denied. Что делать?

Код:
import zipfile, os
import shutil
a = os.listdir(path="D:\домашка\G_ Arhangelskiy_-_Time_Draive\G_ Arhangelskiy_-_Time_Draive")
for i in a:
    s='D:\домашка\G_ Arhangelskiy_-_Time_Draive\G_ Arhangelskiy_-_Time_Draive\\'+str(i)
    b = os.listdir(path=s)
    for j in b:
        s1 = 'D:\домашка\G_ Arhangelskiy_-_Time_Draive\G_ Arhangelskiy_-_Time_Draive\\'+i+'\\'+j
        shutil.copyfile(s1, "D:\домашка\G_ Arhangelskiy_-_Time_Draive\G_ Arhangelskiy_-_Time_Draive — копия")
    os.remove('D:\домашка\G_ Arhangelskiy_-_Time_Draive\G_ Arhangelskiy_-_Time_Draive\\'+i)


Ошибка:
Traceback (most recent call last):
  File "C:\Users\Alex\PycharmProjects\untitled\из папок.py", line 9, in <module>
    shutil.copyfile(s1, "D:\домашка\G_ Arhangelskiy_-_Time_Draive\G_ Arhangelskiy_-_Time_Draive — копия")
  File "C:\Users\Alex\AppData\Local\Programs\Python\Python36\lib\shutil.py", line 115, in copyfile
    with open(dst, 'wb') as fdst:
PermissionError: [Errno 13] Permission denied: 'D:\\домашка\\G_ Arhangelskiy_-_Time_Draive\\G_ Arhangelskiy_-_Time_Draive — копия'


Что делать?
  • Вопрос задан
  • 43801 просмотр
Решения вопроса 1
Не сработало скорее всего из за того, что "\" это спец. символ. Используется для обозначения таких вещей как конец строки (\n), табуляция (\t). В Вашем случае, скорее всего пыталась понять что значит \д, \G и т.д. Для написания символа \ в строках используют \\.
В зависимости от версии Python может быть проблема и в кодировке пути. Т.к. есть различие русских символов в UTF8 и cp1251 которая используется обычно в Windows.

Я бы написал так:
import os
from shutil import copyfile, rmtree

SOURCE = 'D:\\домашка\\G_ Arhangelskiy_-_Time_Draive\\G_ Arhangelskiy_-_Time_Draive'
DESTINATION = 'D:\\домашка\\G_ Arhangelskiy_-_Time_Draive\\G_ Arhangelskiy_-_Time_Draive — копия'

files = [f.path for f in os.scandir(SOURCE) if f.is_file()]
for file in files:
    copyfile(file, DESTINATION)
rmtree(SOURCE)


Как опытный разработчик на Python могу дать совет:
  • Повторяющиеся значения выделить в отдельную переменную (лучше было бы в константу, но в Python нет констант). Это по поводу пути исходника, которую я выделил в SOURCE (есть такое соглашение, когда неизменяемые переменные пишут заглавными)
  • Для удаления пути рекурсивно, есть rmtree в модуле shutils, а так же os.scandir более удобен чем os.listdir
  • Установите линтер (flake8) и настройте свой редактор на использование его. По коду видно, что не используете линтер
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы