使用Python自动将文件复制到相应的目标文件夹(shutil.copytree不能按预期工作)

时间:2015-12-05 01:33:29

标签: python file move shutil copytree

我想自动执行将文件(在其目标文件夹中)复制到位于计算机上不同目录中的相应源文件夹(与源文件夹具有相同文件夹结构)的过程...
我尝试使用python的shutil.copytree,但是会将所有目标文件夹复制到源文件夹中,并且Python文档说“目标目录,由dst命名,必须不存在”(在我的情况下,打破规则)。所以我想要做的只是将目标文件复制到相应的文件夹,这样源文件和目标文件最终会停留在同一个文件夹中...是否可以通过使用python来实现? br />我在这里附上了一个截图,以进一步解释我的意思。

非常感谢你的帮助!与此同时,我也会尝试对此进行更多的研究!

enter image description here

2 个答案:

答案 0 :(得分:2)

以下是[[450, 600], [1.414, 234.156]] [[450, 600], [1.358, 234.552], [1.358, 234.552]] [[450, 600], [1.302, 234.948], [1.302, 234.948], [1.302, 234.948]] [[450, 600], [1.246, 235.344], [1.246, 235.344], [1.246, 235.344], [1.246, 235.344]] 的修改版本,该版本未创建目录(已移除shutil.copytree调用)。

os.makedirs

使用{3}}(或Python 3.x中的mock),您可以通过将import os from shutil import Error, WindowsError, copy2, copystat def copytree(src, dst, symlinks=False, ignore=None): names = os.listdir(src) if ignore is not None: ignored_names = ignore(src, names) else: ignored_names = set() # os.makedirs(dst) errors = [] for name in names: if name in ignored_names: continue srcname = os.path.join(src, name) dstname = os.path.join(dst, name) try: if symlinks and os.path.islink(srcname): linkto = os.readlink(srcname) os.symlink(linkto, dstname) elif os.path.isdir(srcname): copytree(srcname, dstname, symlinks, ignore) else: # Will raise a SpecialFileError for unsupported file types copy2(srcname, dstname) # catch the Error from the recursive copytree so that we can # continue with other files except Error, err: errors.extend(err.args[0]) except EnvironmentError, why: errors.append((srcname, dstname, str(why))) try: copystat(src, dst) except OSError, why: if WindowsError is not None and isinstance(why, WindowsError): # Copying file access times may fail on Windows pass else: errors.append((src, dst, str(why))) if errors: raise Error, errors 替换为Mock对象来暂时停用os.makedirs(请参阅unittest.mock ):

os.makedirs

答案 1 :(得分:0)

我刚刚找到了一种相当简单的方法来实现它。

我们可以使用ditto命令将两个文件夹合并在一起。

ditto PlaceB PlaceA