shutil 模块 提供了多个针对文件或文件集合的高等级操作。 尤其是,文件的复制和删除操作。 对于独立文件的操作, 参考 os 模块

警告: 即使是更高等级的文件复制功能 ( shutil.copy(), shutil.copy2() ) 也不能复制所有文件的元数据(metadata)。 在 POSIX 平台上,这意味着文件的属主和用户组会丢失,ACLs也一样。 在 Mac OS 上, 由于没有使用 the resource fork 和其他元数据,因此意味着 resources 会丢失以及文件类型和创建者ID将不会保持原有状态。 在 Windows 上, 文件所有者, ACLs 以及交换数据流(alternate data streams) 不会被复制。

文件夹和文件复制

shutil.copyfileobj(fsrc, fdst[, length])

复制类文件(file-like)对象 fsrc 的内容到类文件对象 fdst。 可选整数参数 length, 指定缓冲区大小。具体而言, length 的值为负数,复制操作不会将源数据分块进行复制。 默认的,为了避免不可控制的内存消耗,数据会被分块存入chunk中。 注意: 如果 fsrc 对象的当前文件位置不为 0 ,则只有从当前文件位置到文件末位的内容会被复制。

shutil.copyfile(src, dst)

复制文件 src 的内容(不包含元素据)到文件 dst 中。 dst 必须为一个完整的目标文件。 如果要将文件复制目标文件夹中,查看 shutil.copy() 。 src 和 dst 不能为同一个文件,否则会报错。 目标文件位置必须为可写状态,否则会触发 IOError。 如果 dst 已经存在,则会被覆盖。 特别的, 字符设备、块设备和管道不能使用此方法复制。 使用字符串指定src 和 dst 路径。

shutil.copymode(src, dst)

复制 src 的文件权限位到 dst 。 文件的内容、属主和用户组不会受影响。 使用字符串指定src 和 dst 路径。

shutil.copystat(src, dst)

复制文件 src 的文件权限位最后访问 access 时间最后修改 modification 时间和**标识 flags **到 dst。文件的内容、属主和用户组不会受影响。 使用字符串指定src 和 dst 路径。

shutil.copy(src, dst)

复制文件 src 到 dst 文件或文件夹中。 如果 dst 是文件夹, 则会在文件夹中创建或覆盖一个文件,且该文件与 src 的文件名相同。 文件权限位会被复制。使用字符串指定src 和 dst 路径。

shutil.copy2(src, dst)

与 shutil.copy() 类似,另外会同时复制文件的元数据。 实际上,该方法是 shutil.copy() 和 shutil.copystat() 组合。该方法相当于 Unix 命令的 ` cp -p `。

shutil.ignore_patterns(*patterns)

该工厂函数创建了一个可以被调用的函数, 该函数可以用于 shutil.copytree() 的 ** ignore 参数**的值, 以跳过正确匹配的文件和文件夹。 更多参考下面离职。

shutil.copytree(src, dst, symlinks=False, ignore=None)

递归复制整个 src 文件夹。 目标文件夹名为 dst,不能已经存在;方法会自动创建 dst 根文件夹。 文件夹权限和时间通过 shutil.copystat() 复制, 单独的文件通过 shutil.copy2() 复制。 如果 ` symlinks ` 为真, 源文件夹中的符号链接将会被保留,但是原链接的元数据不会被复制。如果值为假或被省略,则链接文件指向文件的内容和元数据复制到新文件夹树中。 如果指定了 ignore, 那么他必须是调用队列(callable),且作为 shutil.copytree() 的参数。参数包括文件夹本机及并通过 os.listdir()返回文件夹包含的内容。由于 shutil.copytree() 递归复制,因此 ignore 会在复制每个子文件夹的时候被调用。 callable必须返回一个由当前文件夹下的文件夹和文件所组成的队列(i.e. a subset of the items in the second argument); 这些文件夹和文件在复制过程中会被忽略。可以使用 shutil.ignore_patterns() 创建callable。

如果发生意外, shutil.Error() 返回错误原因。

该源码应该被当作一个示例而不是最终的工具。

Changed in version 2.3: Error is raised if any exceptions occur during copying, rather than printing a message. Changed in version 2.5: Create intermediate directories needed to create dst, rather than raising an error. Copy permissions and times of directories using copystat(). Changed in version 2.6: Added the ignore argument to be able to influence what is being copied.

移动和删除

shutil.rmtree(path[, ignore_errors[, onerror]])

删除整个目录树; path 必须指向一个文件夹,但不能是一个指向文件夹的符号链接。 如果 ` ignore_errors ` 值为真, 则删除失败时的信息将会被忽略。如果值为假或省略,那么这些错误将通过 onerror 指定的 handler 进行处理; 如果 onerror 被省略,则会 raise 一个异常。

如果指定了 onerror,则必须是包含三个参数: function, path 和 excinfo的 callable 。 第一个参数 ` function ` , 该函数用于 raise 异常;该函数可以是 os.path.islink(), os.listdir(), os.remove(), os.rmdir()。 第二个参数 path 为传递给第一个参数的路径。 第三个参数 excinfo 为 sys.exc_info()返回的异常信息。 通过 onerror raise 的异常不会被捕捉。

Changed in version 2.6: Explicitly check for path being a symbolic link and raise OSError in that case.

shutil.move(src, dst)

将一个文件或文件夹从 src 移动到 dst 如果 dst 已存在且为文件夹,则 src 将会被移动到 dst内。 如果如 dst 存在但不是一个文件夹, 取决于 os.rename() 的语义,dst 可能会被覆盖。 如果 dst 与 src 在相同的文件系统下, 则使用 os.rename() 。 否认则,将使用 shutil.copy2() 复制 src到 dst 并删除。

shutil.Error 

该异常汇集文件操作时 raise 的异常。 例如 shutil.copytree(), the exception argument is a list of 3-tuples (srcname, dstname, exception).

python 中使用 shutil 实现文件或目录的复制、删除、移动相关推荐

  1. 在Python中以扩展名.txt查找目录中的所有文件

    如何在python中扩展名为.txt的目录中找到所有文件? #1楼 import os import sys if len(sys.argv)==2:print('no params')sys.exi ...

  2. 从Python中的另一个文件调用函数

    本文翻译自:Call a function from another file in Python Set_up: I have a .py file for each function I need ...

  3. 【已解决】致命错误:Python.h:没有那个文件或目录

    安装python包的时候或许会出现一下错误: In file included from native/common/include/jpype.h:194,from native/common/jp ...

  4. 用python中re.sub()替换文件中指定字符串

    用python中re.sub()替换文件中指定字符串 1.正则表达式re.sub()的用法 sub(pattern,repl,string,count=0,flag=0) 1)pattern正则表达式 ...

  5. centos7安装twisted出现“致命错误:Python.h:没有那个文件或目录”的终极解决办法

    新安装的centos7,yum也update了,许多插件都安装了.可是在安装twisted时出现了: ERROR: Command errored out with exit status 1:   ...

  6. 致命错误: Python.h:没有那个文件或目录

    In file included from greenlet.c:5:0: greenlet.h:8:20: 致命错误: Python.h:没有那个文件或目录 编译中断. error: Setup s ...

  7. python open 打开是什么类型的文件-详解Python中open()函数指定文件打开方式的用法...

    文件打开方式 当我们用open()函数去打开文件的时候,有好几种打开的模式. 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建. 'a'->追加,写到文件末尾 'b'- ...

  8. C++中判断某一文件或目录是否存在

    C++中判断某一文件或目录是否存在 方法1. C++中较简单方法(使用文件流打开文件) #include <iostream> #include <fstream> using ...

  9. python中如何打开csv文件_Python对CSV文件的处理

    原标题:Python对CSV文件的处理 在接口自动化测试中,把测试的数据存储到csv的文件也是一种很不错的选择,下面就详细的介绍如何实现CSV文件内容的读取和如何把数据写入到CSV的文件中.在Pyth ...

最新文章

  1. HanLP-最短路径分词
  2. 不忘历史才能开辟未来,善于继承才能善于创新
  3. python opencv转换bytesio
  4. Angular单元测试里pipe的mock设计
  5. 这个只需一步就可做富集分析的网站还未发表就被CNS等引用超过350次
  6. 表格和表单的结合示例
  7. Android多媒体框架图
  8. 3.第一本 docker 书 --- docker 网络
  9. 【u023】最长上升子序列(sequence)
  10. 欧几里得算法求最大公约数
  11. eclipse中html设置,无法在eclipse中设置HTMLUNIT
  12. ansys 命令流基础—— 点线面体基本操作
  13. XMPP即时通讯(代码实现)
  14. mysql sql 分析工具下载_DB Query Analyzer下载
  15. solidworks属性管理器_SolidWorks自定义属性——属性标签编制程序
  16. Eclipse中如何创建文件夹管理多个项目
  17. 《前端》eval函数
  18. VulnHub-XXE
  19. 已经破解好的Quartus软件,license为什么会突然失效
  20. 用net user新建用户并设置管理员

热门文章

  1. 计算两组标签/关键词 相似度算法
  2. 一个简单的C语言程序HelloWorld!
  3. 高压开关电源3D PCB绘制教程:SOLIDWORKS绘制片阻片容教程
  4. 南京邮电大学通达学院编译原理2022年1月期末试卷考试回忆
  5. 企业网站关键词布局的策略,技巧和注意事项
  6. modelsim仿真时,有Hiz值或输出为红线时的一种可能原因
  7. python rtsp服务器,RTSP协议进行视频取流的方法、注意点及python实现
  8. c语言拼图验证码编写,Android 简单的实现滑块拼图验证码功能
  9. Cuda环境搭建并部署多目标跟踪模型FairMOT推理验证
  10. SAP如何设置登录系统后直接进入事务码界面