我对Python很陌生,所以请多多包涵。我正在寻找写一些东西来将文件从一个目录复制到另一个目录的方法。我发现以下问答:Here
在那里,我找到了这个答案:
def copytree(src, dst, symlinks=False, ignore=None):
for item in os.listdir(src):
s = os.path.join(src, item)
d = os.path.join(dst, item)
if os.path.isdir(s):
shutil.copytree(s, d, symlinks, ignore)
else:
shutil.copy2(s, d)
后来有人添加到其中以解决它的一些问题:
#!/usr/bin/python
import os
import shutil
import stat
def copytree(src, dst, symlinks = False, ignore = None):
if not os.path.exists(dst):
os.makedirs(dst)
shutil.copystat(src, dst)
lst = os.listdir(src)
if ignore:
excl = ignore(src, lst)
lst = [x for x in lst if x not in excl]
for item in lst:
s = os.path.join(src, item)
d = os.path.join(dst, item)
if symlinks and os.path.islink(s):
if os.path.lexists(d):
os.remove(d)
os.symlink(os.readlink(s), d)
try:
st = os.lstat(s)
mode = stat.S_IMODE(st.st_mode)
os.lchmod(d, mode)
except:
pass # lchmod not available
elif os.path.isdir(s):
copytree(s, d, symlinks, ignore)
else:
shutil.copy2(s, d)
我知道当目标目录已经存在并且需要使用这些修订版本处理时,shutil.copytree()出现问题。
我的问题是关于我看到的符号链接和忽略参数,但不了解它们的作用以及如何解决该问题。
我能够找到下面的定义,这些定义让我望而却步:
符号链接(可选):此参数接受True或False,具体取决于原始链接或链接链接的元数据将在其上复制到新树。
ignore(可选):如果给出ignore,则它必须是可调用的将接收其访问的目录作为其参数copytree()及其内容列表,由os.listdir()返回。
任何帮助我解决这个问题的人,将不胜感激。
这可能不是您要查找的内容,但是如果可以的话,简单地使用操作系统的copy函数将更容易编码和理解。这可以通过os库中的python完成。
def copytree(src,dst):
os.system("cp -r "+src+" "+dst)
此示例假定您使用的是Linux,但是它可以在任何OS中都可以使用,只需将'cp -r'切换为本地复制命令即可。