【问题标题】:using shutil.copyfile I get a Python IOError: [Errno 13] Permission denied:使用 shutil.copyfile 我得到一个 Python IOError: [Errno 13] Permission denied:
【发布时间】:2012-07-01 22:42:24
【问题描述】:

我有一些使用 shutil.copyfile 的 python 代码:

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'

为什么我没有复制文件的权限?

【问题讨论】:

  • shutil.copyfile 将使用运行脚本的用户的权限运行。要么使用 sudo 运行 python 脚本,要么以 root 身份运行它,或者使用可以复制并在需要时将自身提升为 root 的不同库。
  • 你可以看到这个解决方案:https://stackoverflow.com/a/53894504/9533909 解决了我同样的问题

标签: python permission-denied shutil


【解决方案1】:

我在这里尝试了所有方法,但我的代码的问题在于目标文件夹的权限。我创建了自己的函数来创建目录,

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

后来我用 '0o777' 八进制值代替了 777,后来又使用了shutil.copyfile(target_file,dest_file),它成功了!

希望这对首先创建目录然后在其中复制文件的人有所帮助。

【讨论】:

    【解决方案2】:

    如果可以的话,我建议你宁愿使用 shutil.copyfile 而不是 shutil.copy。

    使用shutil.copyfile,你必须考虑写入权限等元数据。

    【讨论】:

      【解决方案3】:

      来自shutil.copyfiledocumentation

      将名为 src 的文件的内容(无元数据)复制到名为 目的地dst 必须是完整的目标文件名;看看 shutil.copy() 对于接受目标目录路径的副本。如果 src 和 dst 是 相同的文件,会引发错误。目标位置必须是 可写;否则,将引发 IOError 异常。如果 dst 已经存在,将被替换。字符等特殊文件 或无法使用此功能复制块设备和管道。源代码 和 dst 是以字符串形式给出的路径名。

      所以我猜你需要使用shutil.copy 或将文件名添加到des

      des = os.path.join(des, x[1])
      

      【讨论】:

      • 哦,谢谢你,我现在感觉很愚蠢.. 现在我期待一个 IOError:[Errno 2] 没有这样的文件或目录:'C:\\Documents and Settings\\user\\Desktop\\ tryPy\\Output\\blatwo.docx'
      • @DrDark 我不确定原因,但这可能意味着它找不到Output 文件夹。试试open('C:\\Documents and Settings\\user\\Desktop\\tryPy\\Output\\blatwo.docx', 'w'):会不会产生同样的错误?
      • 问题是您指定的路径是输出文件夹,所以它说它找不到文件或目录有点奇怪。你知道该怎么做吗? : 哦
      • @DrDark 检查文件夹是否存在并且其名称没有特殊字符。这就是我现在能想到的。如果它没有帮助,也许发布一个新问题?带有相关代码和错误信息
      猜你喜欢
      • 2013-06-07
      • 2018-08-15
      • 2016-02-28
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 2014-05-03
      • 2020-12-27
      相关资源
      最近更新 更多