首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >copytree(),什么是参数符号链接和忽略?

copytree(),什么是参数符号链接和忽略?
EN

Stack Overflow用户
提问于 2019-11-15 17:00:58
回答 1查看 1K关注 0票数 1

我对Python很陌生,所以请容忍我。我想写些东西把文件从一个目录复制到另一个目录。我找到了以下问题和答案:Here

在那里,我找到了这个答案:

代码语言:javascript
复制
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)

为了解决它的一些问题,后来添加了以下内容:

代码语言:javascript
复制
#!/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()会出现问题,而这些修订是为了处理它。

我的问题是关于我所看到的符号链接和忽略参数,而不是理解它们所做的以及它如何解决这个问题。

我找到了下面的定义,这些定义在我的脑海中挥之不去:

符号链接(可选):该参数接受真或假,这取决于原始链接或链接链接的元数据将复制到新树。

忽略(可选):如果指定了“忽略”,则必须是可调用的,它必须接收由copytree()访问的目录以及由os.listdir().返回的目录的参数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-15 18:55:28

这可能不是您想要的,但是如果您能够,那么简单地使用os的复制函数将更容易编码和理解。这可以在带有os库的python中完成。

代码语言:javascript
复制
def copytree(src,dst):
    os.system("cp -r "+src+" "+dst)

本例假设您使用的是linux,但是它可以在任何操作系统上工作,您只需为本地-r命令切换“cp-r”即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58881593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档