0

我正在尝试复制我的 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'"

提前致谢

我已经尝试了以下建议,但仍然无法正常工作

4

3 回答 3

1

你为什么用repr()on file_name.strip()?这将用单引号将您的文件名括起来 - 并且文件路径中不存在这些引号。删除repr(),它应该可以工作。

于 2012-10-06T21:47:19.390 回答
0

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

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

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

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

于 2012-10-06T21:59:51.137 回答
0

它不喜欢 ~ 我把完整路径放进去。我也刚刚编辑了一点,并使用 sourcedir=os.path.expanduser('~/Library/Services/') 来展开主目录

于 2012-10-24T19:12:01.270 回答