我在复制目录时遇到问题

时间:2012-10-06 21:44:05

标签: python

我正在尝试复制我的Automater工作流程,我已将它们列在配置文件中,我想循环遍历配置文件并复制目录。他们的名字中有空格,我遇到了麻烦。

它正确打印文件名等但副本失败,因为带有副本的名称周围似乎有额外的“”

import os
import shutil

confdir=os.getenv("my_config")
dropbox=os.getenv("dropbox")
conffile = ('services.conf')
conffilename=os.path.join(confdir, conffile)    
sourcedir= (r'~/Library/Services/')
destdir=os.path.join(dropbox, "My_backups")

for file_name in open(conffilename):
    sourcefile=os.path.join(sourcedir, repr(file_name.strip()))
    print sourcefile
    destfile=os.path.join(destdir, file_name.strip())
    shutil.copytree(sourcefile, destfile)

错误是

~/Library/Services/'Add PDF Metadata.workflow'
Traceback (most recent call last):
  File "Untitled 3.py", line 15, in <module>
    shutil.copytree(sourcefile, destfile)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py",     line 168, in copytree
    names = os.listdir(src)
OSError: [Errno 2] No such file or directory: "~/Library/Services/'Add PDF Metadata.workflow'"

提前致谢

我已尝试过以下建议,但仍然无效

3 个答案:

答案 0 :(得分:1)

为什么在repr()上使用file_name.strip()?这将使用单引号包围您的文件名 - 并且文件路径中不存在这些文件名。删除repr(),它应该可以。

答案 1 :(得分:0)

shutil.copytree(src, dst)将递归地将位于src的目录树(及其中的所有文件)复制到dst的新目录树。它不适用于文件。

在这里,您要复制单个文件,而不是完整的目录树,您应该只使用shutil.copyshutil.copy2

如果文件可能位于您要重现的目录树中,那么在调用shutil.copy(sourcefile)实际复制文件之前,可以使用os.makedirs作为os.path.dirname(destfile)返回的路径到destfile

但是,请注意,使用已存在的目标调用os.makedirs会引发错误,因此您可能希望try / except

答案 2 :(得分:0)

它不喜欢〜我把完整的路径放入。我还编辑了一个位并使用sourcedir = os.path.expanduser('〜/ Library / Services /')来扩展主目录< / p>