Python系列模块之标准库shutil详解

感谢点赞和关注 ,每天进步一点点!加油!
目录
一、shutil介绍
二 、使用详解
2.1 复制函数
2.1.1 shutil.copy
2.1.2 shutil.copy2
2.1.3 shutil.copyfile
2.1.4 shutil.copytree
2.2 移动文件
2.2.1 shutil.move
2.3 删除文件
2.3.1 shutil.rmtree
2.4 文件和文件夹打包
2.5 实战案例
Python 系列文章学习记录:
Python系列之Windows环境安装配置_开着拖拉机回家的博客-CSDN博客
Python系列之变量和运算符_开着拖拉机回家的博客-CSDN博客
Python系列之判断和循环_开着拖拉机回家的博客-CSDN博客
Python系列之字符串和列表_开着拖拉机回家的博客-CSDN博客
Python系列之文件操作和函数_开着拖拉机回家的博客-CSDN博客
Python系列模块之标准库OS详解_开着拖拉机回家的博客-CSDN博客
Python系列模块之标准库re详解_开着拖拉机回家的博客-CSDN博客
Python系列模块之标准库json详解_开着拖拉机回家的博客-CSDN博客
Python系列模块之标准库shutil详解_开着拖拉机回家的博客-CSDN博客
一、shutil介绍
OS 模块是Python标准库中一个重要的模块,里面提供了对目录和文件的一般常用操作。而Python另外一个标准库——shutil库,它作为os模块的补充,提供了复制、移动、删除、压缩、解压等操作,这些 os 模块中一般是没有提供的。但是需要注意的是:shutil 模块对压缩包的处理是调用 ZipFile 和 TarFile这两个模块来进行的。
二 、使用详解
2.1 复制函数
2.1.1 shutil.copy
源码方法注解
def copy(src, dst, *, follow_symlinks=True):"""Copy data and mode bits ("cp src dst"). Return the file's destination.The destination may be a directory.If follow_symlinks is false, symlinks won't be followed. Thisresembles GNU's "cp -P src dst".If source and destination are the same file, a SameFileError will beraised.# linux
cp -P src dst same as --preserve=mode,ownership,timestamps
copy() 复制文件数据和文件许可模式,不保留其他元数据,例如文件的创建时间和修改时间,要保留原始文件中的所有文件元数据,应用copy2()。注意: copy()不能用于复制目录。
- src为源文件路径(必须是文件),dst为目标文件路径(文件名可加可不加)
- 目标文件如存在会覆盖掉,不存在会创建新文件, 包括路径
- 只copy内容和权限,其他文件属性如时间没有copy,注意权限是copy了
- 返回值为目标文件路径
import shutil
shutil.copy('/root/data.txt','/root/data_copy.txt' ) #目标文件无需存在
执行结果如下:
我们可以看到 data_copy.txt 文件的创建时间与原始文件 不一样,为系统时间。
2.1.2 shutil.copy2
def copy2(src, dst, *, follow_symlinks=True):"""Copy data and all stat info ("cp -p src dst"). Return the file'sdestination."The destination may be a directory.If follow_symlinks is false, symlinks won't be followed. Thisresembles GNU's "cp -P src dst"."""if os.path.isdir(dst):dst = os.path.join(dst, os.path.basename(src))copyfile(src, dst, follow_symlinks=follow_symlinks)copystat(src, dst, follow_symlinks=follow_symlinks)return dst
拷贝文件和状态信息,copy2()尝试将所有元数据从源文件的符号链接复制到新创建的目标文件的符号链接。但是此功能并非在所有平台上都可以用。在某些或所有此功能不可用的平台上,copy2()将保留所有可能的元数据。shutil.copy2()相同于同时做了shutil.copyfile()和shutil.copystat(),因此该方法名字这里的copy2可以简单记忆成2次copy。
注意: copy2()不能用于复制目录
Linux 中 cp -p 参数 -P: same as --preserve=mode,ownership,timestamps
import shutil
shutil.copy2('/home/kangll/data01.txt','/home/kangll/data_copy2.txt' ) #目标文件无需存在
如下使用 root 用户 执行 test.py 脚本:

切换到kangll 用户执行,copy2 后的文件权限和创建时间 都和原始文件一样。

总结
Python的shutil.copy2()函数会复制文件的权限,并尽可能地保留文件的元数据,包括所有权、时间戳等等。与shutil.copy()函数不同的是,shutil.copy2()函数会尽量保留源文件的所有元数据,而不是只复制一部分。
2.1.3 shutil.copyfile
将一个文件的内容拷贝到另一个文件中,目标文件无需存在
copyfile(src, dst, *, follow_symlinks=True)
参数 | 描述 |
src | 源路径 |
dst | dst为目标文件路径,且必须包含文件名,文件存在则会覆盖 |
follow_symlinks | 设置为True时,若src为软连接,则当成文件复制;如果设置为False,复制软连接。默认为True。 |
实例:
import shutil
shutil.copyfile('/home/kangll/data01.txt','/home/kangll/data_copyfile.txt' )
执行结果:

2.1.4 shutil.copytree
copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,ignore_dangling_symlinks=False)
参数说明:
参数 | 描述 |
src | 源路径 |
dst | 目标路径 , 目标目录必须不存在 |
symlinks=False | 由符号指向的文件的内容链接被复制 |
copy_function | 可选的copy_function参数是一个将被使用的可调用对象 复制每个文件。将使用源路径和目标路径作为参数。默认情况下,使用copy2() |
示例:
import shutil
shutil.copytree('/home/kangll/copytree','/home/kangll/copytree_test') # 目标目录必须不存在
执行结果:

如果目标路径存在 则会报出错误

2.2 移动文件
2.2.1 shutil.move
move(src, dst, copy_function=copy2)
"""
递归移动文件或目录到另一个位置。这是
类似于Unix的“mv”命令。返回文件或目录的
目的地。
"""
实例:
import shutil
shutil.move('/home/kangll/data01.txt','/home/kangll/move')
执行结果:

2.3 删除文件
2.3.1 shutil.rmtree
import shutil
shutil.rmtree("/home/kangll/copytree_test")
2.4 文件和文件夹打包
make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,dry_run=0, owner=None, group=None, logger=None)
- base_name:压缩、打包后的文件名称,也可以是压缩包的路径,如果要保存至指定路径则需要指定路径,此处的文件名称不需加格式后缀,打包或压缩完成后会自动加上
- format:压缩或打包的格式,有tar、zip、bztar、gztar
- root_dir:打包时切换到的根路径。默认值为当前路径
- base_dir:要打包的路径。也就是说对base_dir所指定的路径进行打包,默认值为 root_dir
实例:
import shutil
# #### 三个参数说明
# 打包后tar包保存路径 home/kangll/move/copytree tar包名字为 copytree
# 格式 tar包
# 要打包的文件路径
shutil.make_archive("/home/kangll/move/copytree","tar","/home/kangll/copytree")
# 和上面的执行结果一样
# shutil.make_archive("/home/kangll/move/copytree","tar",base_dir="/home/kangll/copytree")
执行结果:
使用 Linux 命令解压:
2.5 实战案例
需求:将指定目录的文件根据文件名匹配 将文件移动到指定的目录。
move_file.py
# -*- coding:UTF-8 -*-import logging
import os
import re
import shutil
import sys
from imp import reload
from logging.handlers import RotatingFileHandlerreload(sys)# 初始化日志
logger = logging.getLogger('mylogger')
logger.setLevel(level=logging.INFO)
fmt = '%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'
format_str = logging.Formatter(fmt)
fh = RotatingFileHandler("move_file.log", maxBytes=10*1024*1024, backupCount=2,encoding="utf-8")
fh.namer = lambda x: "backup."+x.split(".")[-1]fh.setFormatter(fmt=format_str)
logger.addHandler(fh)def move_file(res_dir, tar_dir, pattern):""" 文件移动:param res_dir: 源路径:param tar_dir: 目标路径:param pattern: 正则匹配模式:return:"""try:logger.info("开始移动文件!")for filename in os.listdir(res_dir):# 获取文件的完整路径file_path = os.path.join(res_dir, filename)print(filename, pattern)# 正则匹配文件名if re.match(pattern, filename):shutil.move(file_path, tar_dir) # 移动文件 # shutil库,它作为os模块的补充,提供了复制、移动、删除、压缩、解压print("已移动文件【%s】" %filename)logger.info("结束移动文件!")except Exception as why:print(why)if __name__ == "__main__":print(sys.argv)if len(sys.argv) == 4:move_file(sys.argv[1], sys.argv[2], sys.argv[3])
在Windows 上调用
python.exe D:\\IPVA\\file_move\\move_file.py D:\\IPVA\Data_Traffic\\DataServerCloud01_AlarmEvent\\ D:\\IPVA\Data_Traffic_Bak\\DataServerCloud01_AlarmEvent\\ Data.*.COMPLETED
移动成功, 之后我又做了ren重命名
https://www.cnblogs.com/ltkekeli1229/p/15709414.html
Python的shutil模块解析_python shutil_斩心之鬼的博客-CSDN博客
相关文章:

Python系列模块之标准库shutil详解
感谢点赞和关注 ,每天进步一点点!加油! 目录 一、shutil介绍 二 、使用详解 2.1 复制函数 2.1.1 shutil.copy 2.1.2 shutil.copy2 2.1.3 shutil.copyfile 2.1.4 shutil.copytree 2.2 移动文件 2.2.1 shutil.move 2.3 删除文件 2.3…...
pb如何播放Flash
---- Flash动画不仅包含动画,还可有声音、超文本连接,同时由于它是矢量格式文件,生成的这种包含动画、声音等的文件(*.swf)很小,非常适 合在网络上传输使用,因而在当前Web网页技术中得到很快发展。本文讨论在PowerBuilder6.5数据库编程中用Flash4提供的控件"Swflas…...

独立成分分析ICA
独立成分分析 ICA 1. 算法原理简介2.源信号与混合信号的差异2.1 独立性 Independence2.2 高斯性 Normality2.3 复杂性 Complexity 3.非高斯性的度量3.1 峭度 Kurtosis 参考文献 blind source separation (BSS) 1. 算法原理简介 mixing得到signal mixture过程: x 1…...
从零开始之如何在React Native中使用导航
好的,让我们开始学习如何在React Native中使用导航。 安装React Navigation 首先,你需要安装React Navigation库。在项目文件夹中打开终端窗口,并运行以下命令: npm install react-navigation/native 或者 yarn add react-nav…...

RAW、RGB 、YUV三种图像格式理解
文章目录 1. 背景2. 相关概念2.1 颜色与色彩空间2.2 RAW图像2.3 RGB图像2.4 YUV图像 3. 分类简图 RAW、RGB 、YUV三种图像格式理解 1. 背景 在工作中,经常听到用来描述图像格式的RAW,RGB与YUV,但一直没有系统的进行了解,处于局部认…...
关于对【mysql存储过程】的理解与简述
【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/130857854 出自【进步*于辰的博客】 【存储过程】这个知识点,我在大二下期学习【mys…...
贪吃蛇游戏的制作记录
关于蛇的实现代码 #include "snake.h" #include "globalvar.h" #include <graphics.h> int fangXiang 1;//方向 0 右 1 上 2 左 3 下 int snakeHang[100] { 10,11,12,13,14 };//蛇 每节所在行 int snakeLie[100] { 10,10,10,10,10 };//蛇 每节所…...
Go基础入门
Go是一种现代的、高效的、开源的编程语言,由Google开发。它的语法简洁、易于学习和使用,支持并发编程,特别适合构建网络应用和分布式系统。本篇文章将介绍Go语言的基础语法和常用特性,帮助初学者快速入门。 一、Go语言的基础语法…...

JavaScript教程(二)
BOM浏览器对象模型 什么是BOM BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是 window;BOM由一系列相关的对象构成,并且每个对象都提供了很多方…...
设计模式之代理模式
代理模式的定义是:为其他对象提供一种代理以控制对这个对象的访问。 因为代理类与服务类实现同样的接口,所以代理类能代替服务类提供给客户端。当客户端使用代理类时,代理类能对请求进行处理(例如增加访问控制、缓存请求结果、隐…...

初识MySQL
💕与其抱怨生活的不公,不如积极行动改变它。💕 🐼作者:不能再留遗憾了🐼 🎆专栏:MySQL学习🎆 🚗本文章主要内容:简单了解什么是MySQL、MySQL的发展…...
内网渗透(八十五)之ADCS证书服务攻击
ADCS证书服务攻击 漏洞背景 2021年6月17日,国外安全研究员 Will Schroeder 和 Lee Christensen 共同发布了针对ADCS(Active Directory Certificate Service, 活动目录证书服务)的攻击手法。同年8月5日,在Black Hat 2021上 Will Schroeder 和 Lee CHristensen 对该攻击手法进…...

通过python封装1688图片搜索商品数据接口,拍立淘API接口
1688图片搜索API封装接口是一个可以帮助用户快速使用1688图片搜索API的接口封装库。该接口封装库可以帮助用户快速引入1688图片搜索API,并提供各种参数配置和封装的API调用方法,以方便用户快速实现自己的图片搜索需求。 该接口封装库将1688图片搜索API的…...
HashMap的源码分析(基于JDK1.8)
HashMap的源码分析(基于JDK1.8) Java中的HashMap是一种常用的数据结构,它是基于哈希表的数据结构,可以用来存储键值对。在HashMap中,每个键值对被称作一个Entry,每个Entry包含一个键和一个值。HashMap的实…...
算法能力-数据安全复合治理框架和模型解读(5)
数据治理,数据安全治理行业在发展,在实践,所以很多东西是实践出来的,哪有什么神仙理论指导,即使有也是一家之说,但为了提高企业投产比,必要的认知是必须的,落地数据安全治理科技水平差异直接决定产品和项目是否可持续性,当前和未来更需要专业和有效创新。数据安全治理…...

java从入门到起飞——基础概念
目录 背景注释和关键字注释关键字 常量变量数据类型计算存储单元数据类型分类 标识符小驼峰命名法(方法、变量)大驼峰命名法(类) 类型转换自动类型转换强制类型转换 计算机中的数据存储总结 背景 学编程这么长时间了,重…...
C语言判断队列满or空
1 静态数组队列 循环队列通常使用数组来实现,判别循环队列是否满或空,可以借助两个变量front和rear。 判空:当front和rear相等时,队列为空。 判满:当(front 1) % n rear时,队列为满,其中n为…...
系统中级集成项目管理工程师(中项)好考吗?
软考系统集成项目管理工程师是一项非常重要的考试,对于从事信息技术和管理方面的人员来说,这是一个非常有用的证书。 对于零基础的考生来说,软考系统集成项目管理工程师是否好考,主要取决于他们的学习态度和学习方法。 一般而言…...

【Java多线程进阶】CAS机制
前言 CAS指的是Compare-And-Swap(比较与交换),它是一种多线程同步的技术,常用于实现无锁算法,从而提高多线程程序的性能和扩展性。本篇文章具体讲解如何使用 CAS 的机制以及 CAS 机制带来的问题。 目录 1. 什么是CAS&…...
flex布局总结
flex布局总结 总结自:https://www.ruanyifeng.com/blog/2015/07/flex-grammar.html 内容: flex意思是-弹性布局,可以为盒型模型提供极大的灵活性,设置为flex布局后,子元素的fload clear vertical会失效 概念&#x…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...