Python shutil模块文件操作详解与实例

周末不加班
周末不加班
发布时间:2026-10-13| 5人浏览过
原创

本文详细解析Python标准库shutil模块的核心功能,涵盖copyfileobj、copyfile、copymode、copystat、copy、copy2及copytree等文件复制方法,以及rmtree和move等移动与删除操作。通过具体代码示例说明各函数的参数差异、权限处理及路径要求,帮助开发者高效进行文件管理。

Python shutil模块概述

本文深入探讨Python中shutil文件操作工具的具体应用,通过详细的代码示例展示其功能,为读者在学习或实际工作中提供有价值的参考。

Python中的shutil模块提供了高层次的文件操作接口,其核心优势在于简化了文件的复制与删除流程,使相关操作更加直观和便捷。

shutil文件复制核心函数

一:shutil.copyfileobj(fsrc,fdst [23])

该函数用于将源文件fsrc的内容复制到目标文件fdst中。若指定整数长度参数,则作为缓冲区大小使用。需要注意的是,fsrc和fdst必须是已打开的文件对象,不能直接传入文件名字符串。


def copyfileobj(fsrc, fdst, length=16*1024):
  """copy data from file-like object fsrc to file-like object fdst"""
  while 1:
    buf = fsrc.read(length)
    if not buf:
      break
    fdst.write(buf)

代码如下:


f1 = open("111.txt", "r",encoding="utf-8")
f2 = open("222.txt", "w", encoding="utf-8")
shutil.copyfileobj(fsrc=f1, fdst=f2,length=15)

二:def copyfile(src, dst, *, follow_symlinks=True)

此函数用于直接拷贝整个文件。

运用代码如下:


shutil.copyfile("111.txt", "333.txt")

目标文件333.txt无需预先存在;若该文件已存在,则会被新内容覆盖。

文件权限与元数据复制

三:shutil.copymode(src,dst,*,follow_symlinks=True)

该操作仅复制源文件的权限属性,不会复制文件内容或其他元数据。

代码运用如下:


shutil.copymode("111.txt", "333.txt")

注意,源文件111.txt和目标文件333.txt都必须已存在。此操作将前者的权限复制到后者,相当于赋予后者与前者相同的权限,但不会改变后者的文件内容。

四:shutil.copystat(src,dst,*,follow_symlinks=True)

与copymode类似,但copystat会复制更多属性,包括权限、最后访问时间、最后修改时间以及文件标志(flags)。同样,此操作不会改变目标文件的内容。


shutil.copystat("111.txt", "333.txt")

文件与目录的高级复制

五:shutil.copy(src,dst,*,follow_symlinks=True)

该函数将源文件复制到目标文件或目录。若dst指定为目录,则使用src的基本文件名将文件复制到该目录中,并返回新创建文件的路径。

复制到文件的情况与前述类似:


shutil.copy("111.txt", dst="444.txt")

若复制到目录,只需指定第二个参数为路径,文件将以原文件名复制到该指定路径,示例如下:


shutil.copy("111.txt", dst="D:\\222.txt")

相比之下,copyfile函数必须在路径后指定文件名,以指定名称复制到目标路径,示例如下:


shutil.copy("111.txt", dst="D:\\222.txt")

六:shutil.copy2(src,dst,*,follow_symlinks=True)

在copy的基础上,copy2还会复制文件的最后访问时间和修改时间,功能类似于Linux命令cp -p。

目录树拷贝与递归删除

七:shutil.copytree(src,dst,symlinks=False,ignore=None,copyfunction=copy2,ignore_dangling_symlinks=False)

用于拷贝整个目录。若第三个参数为True,则在复制目录时保持文件夹下的符号链接;若为False,则在复制的目录下生成物理副本以替代符号链接。


shutil.copytree(src="11", dst="22")

注意:如果源目录和目标目录不在同一路径下,需要在路径前加上绝对路径或相对路径。

八:shutil.rmtree(路径,ignore_errors=False,onerror=None)

递归删除指定目录及其内部的所有内容:

代码如下:


shutil.rmtree("E:\py project\python_ku\subprocess_demo\\11") 

文件移动操作

九:shutil.move(src,dst,copyfunction=copy2)

递归地将文件或目录(src)移动到另一个位置(dst),并返回目标路径。


shutil.move(src="11", dst="D:\\")

上述命令表示将当前路径下的11目录移动到D盘根目录下。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。