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…...

2023 Idea 热部署 JRebel 插件激活方法
2023 Idea 热部署 JRebel 插件激活方法 1. 下载源代码 进入下面 github 地址 clone 代码到本地 https://github.com/Byron4j/JrebelLicenseServerforJava 2. 编译和打包 cd /Users/daixiaohu/Desktop/JrebelLicenseServerforJavamvn clean package3. 运行项目 cd target/jav…...

Java (韩老师课程)第三章
变量的介绍 * 变量是程序的基本组成单位 * 变量相当于内存中一个数据存储空间的表示 * 变量在该区域有自己的名称和类型 * 变量必须先声明,后使用,即顺序 * 变量在该区域的数据/值可以在同一类型内不断变化 * 变量在同一个作用域中不能重…...

【P38】JMeter 随机控制器(Random Controller)
文章目录 一、随机控制器(Random Controller)参数说明二、测试计划设计2.1、测试计划一2.2、测试计划二2.3、勾选忽略子控制器块 一、随机控制器(Random Controller)参数说明 可以让控制器内部的逻辑随机执行一个,一般…...

API电商 ERP 数据管理
没有 API,应用之间的通信将会被扼杀;软件开发者将不断重写并执行相同功能的软件;创新的脚步将会放缓。 API 随处可见。大到一个软件系统,小到几行程序,只要具备了一定的特征,都可以被称作 API。那么&#…...

【SQLAlchemy】第四篇——事务
可以把事务理解为一系列操作的集合:这些操作要么全部执行,要么一个也不执行——这样就可以保证数据的一致性和可靠性。在执行更新和删除操作时,尤其要注意利用事务的这个特征。 SQLAlchemy中提供了许多方法来利用事务。 1、如何确保操作生效…...

浅谈QMap中erase与remove的区别
QMap中erase与remove的区别 QMap中erase与remove的区别分别使用erase和remove删除元素使用erase删除元素使用remove删除元素代码讲解 QMap中erase与remove的区别 在实践中发现erase删除元素之后,其迭代器自动指向下一个元素,而remove删除元素之后迭代器…...

FastThreadLocal 原理解析
FastThreadLocal 每个 FastThread 包含一个 FastThreadLocalMap,每个 FastThreadLocalThread 中的多个 FastThreadLocal 占用不同的索引。每个 InternalThreadLocalMap 的第一个元素保存了所有的 ThreadLocal 对象。之后的元素保存了每个 ThreadLocal 对应的 value …...

设计模式B站学习(一)(java)
这里写目录标题 一、设计模式概述1.1 软件设计模式的产生背景1.2 软件设计模式的概念1.3 学习设计模式的必要性1.4 设计模式分类 二、UML图2.1 类图概述2.2 类图的作用2.3 类图表示法2.3.1 类图表示方法2.3.2 类与类之间关系的表示方法2.3.2.1 关联关系2.3.2.2 聚合关系2.3.2.3…...

Pandas如何轻松按位置删除多重索引列?
在Pandas处理DataFrame数据的过程中,我们常常需要删除某些不需要的列。那么,如何高效地按位置删除Pandas DataFrame的多重索引列呢? 今天分享在Pandas中按位置删除多重索引列的具体方法: 第一步:获取所有列标签 使用df.columns获取DataFrame的所有列标…...

第五十七天学习记录:C语言进阶:结构体链表的自学
先展示一段代码: #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h> #include <stdlib.h>// 定义链表节点结构体 typedef struct Node {int value;struct Node* next; } Node;int main() {// 创建链表头指针Node* head (Node*)malloc(sizeof(Node…...