@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 — копия'


Что делать?
  • Вопрос задан
  • 42711 просмотров
Решения вопроса 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) и настройте свой редактор на использование его. По коду видно, что не используете линтер
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы