используя Shutil.copyfile, я получаю Python IOError: [Errno 13] Отказано в доступе:

У меня есть код Python, использующий файл Shutil.copyfile:

import os
import shutil

src='C:\Documents and Settings\user\Desktop\FilesPy'
des='C:\Documents and Settings\user\Desktop\\tryPy\Output'

x=os.listdir(src)
a=os.path.join(src,x[1])

shutil.copyfile(a,des)
print a

Это дает мне ошибку:

IOError: [Errno 13] Permission denied: 'C:\\Documents and Settings\\user\\Desktop\\tryPy\\Output'

Почему у меня нет разрешения на копирование файла?


person DrDark    schedule 30.06.2012    source источник
comment
Shutil.copyfile будет запускаться с правами пользователя, запустившего скрипт. Либо запустите скрипт python с помощью sudo, либо запустите его от имени пользователя root, либо используйте другую библиотеку, которая может сделать копию и при необходимости подняться до уровня root.   -  person Eric Leschinski    schedule 01.09.2016
comment
Вы можете увидеть это решение: https://stackoverflow.com/a/53894504/9533909 решил мою ту же проблему   -  person hassanzadeh.sd    schedule 20.02.2019


Ответы (3)


Из документации shutil.copyfile:

Скопируйте содержимое (без метаданных) файла с именем src в файл с именем dst. dst должно быть полным именем целевого файла; посмотрите на Shutil.copy() для копии, которая принимает путь к целевому каталогу. Если src и dst являются одними и теми же файлами, возникает ошибка. Место назначения должно быть доступно для записи; в противном случае будет возбуждено исключение IOError. Если dst уже существует, он будет заменен. Специальные файлы, такие как символьные или блочные устройства и каналы, не могут быть скопированы с помощью этой функции. src и dst — это имена путей, заданные в виде строк.

Поэтому я думаю, вам нужно либо использовать shutil.copy, либо добавить имя файла в des:

des = os.path.join(des, x[1])
person Lev Levitsky    schedule 30.06.2012
comment
о, спасибо, я чувствую себя таким глупым сейчас .. теперь я ожидаю IOError: [Errno 2] Нет такого файла или каталога: 'C:\\Documents and Settings\\user\\Desktop\\tryPy\\Output\\blatwo. документ - person DrDark; 01.07.2012
comment
@DrDark Я не уверен в причине, но это, вероятно, означает, что он не может найти папку Output. Попробуйте open('C:\\Documents and Settings\\user\\Desktop\\tryPy\\Output\\blatwo.docx', 'w'): будет ли такая же ошибка? - person Lev Levitsky; 01.07.2012
comment
дело в том, что указанный вами путь является выходной папкой, поэтому немного странно, что он говорит, что не может найти файл или каталог. у вас есть идеи, что делать? : О - person DrDark; 01.07.2012
comment
@DrDark убедитесь, что папка существует и в ее имени нет специальных символов. Это все, о чем я могу думать на данный момент. Если это не поможет, может быть, опубликовать новый вопрос? с соответствующим кодом и сообщением об ошибке - person Lev Levitsky; 01.07.2012

Я советую вам лучше использовать Shutil.copyfile , а не Shutil.copy если вы можете.

С Shutil.copyfile вы должны учитывать метаданные, такие как разрешение на запись.

person White    schedule 17.02.2015

Я пробовал все здесь, но проблема с моим кодом была связана с разрешением папки назначения. Я создал свою собственную функцию для создания каталога,

def mkdirs(newdir,mode=777):
    try:
        os.makedirs(newdir, mode)
    except OSError as err:
        return err

Вместо 777 позже я использовал восьмеричное значение «0o777», а позже использовал shutil.copyfile(target_file,dest_file), и это сработало!

Надеюсь, это поможет кому-то, кто сначала создает каталог, а затем копирует в него файл.

person Ravi Bhanushali    schedule 02.04.2019