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