文件传输w / python

时间:2017-07-28 22:57:03

标签: python shutil

我正在尝试制作一个程序: 复制&粘贴目录并将其放置到新位置。我不认为我的代码是正确的,我认为将文件移动到完全不同的位置很简单

import os
import shutil
login = os.getlogin()

SOURCE_FILE_DEKSTOP =  '/Users/%s/Desktop' % (login)
DST_FILE_WD = 'Users/%s/WorkDocs' % (login)

shutil.move(SOURCE_FILE_DEKSTOP, DST_FILE_WD)

我也遇到了这个错误

Traceback (most recent call last):
   File "/Users/gomcrai/pythings/fileTransfer.py", line 8, in <module>
    shutil.move(SOURCE_FILE_DEKSTOP, DST_FILE_WD)
   File "/Library/Frameworks/Python.framework/Versions/2.7/lib    /python2.7/shutil.py", line 300, in move
rmtree(src)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 256, in rmtree
    onerror(os.rmdir, path, sys.exc_info())
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 254, in rmtree
os.rmdir(path)
OSError: [Errno 13] Permission denied: '/Users/gomcrai/Desktop'

1 个答案:

答案 0 :(得分:1)

如果你真的想复制,而不是移动,那么shutil.copytree是一个更好的选择。 move将移动条目,删除原始条目。

您收到错误是因为Mac在其认为应该始终存在的文件夹上有访问控制列表,而Desktop就是其中之一,因为它用于存储所有文件在桌面上可见。由于shutil.move正试图删除它,因此它会遇到ACL并被拒绝。

ls -ale /Users/gomcrai/Desktop应该显示ACL,显示如下内容:0: group:everyone deny delete

如果您想剪切并粘贴而不是复制并粘贴目录,则可以使用os.listdir或{{1}找到os.walk中的文件和文件夹并移动所有文件和文件夹,或者使用Desktop/上的shutil.copytree,然后移除Desktop内的所有内容,同时保留该文件夹。