python应用-shutil详解文件复制/移动/删除功能

2024-04-22 11:12

本文主要是介绍python应用-shutil详解文件复制/移动/删除功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

shutil 模块是 Python 的标准库模块(直接导入,无需下载),提供了像在电脑上操作文件、文件夹的功能,如复制、移动、删除文件和文件夹等。

shutil 模块的__all__包含的函数如下:

复制文件

使用 shutil.copy() 和shutil.copy2h函数可以复制文件,不支持复制目录。copy函数和copy2函数的区别是:

shutil.copy2函数:在复制文件时会尝试保留源文件的元数据,如文件权限、最后修改时间等。

shutil.copy函数:不会保留这些元数据,它只进行简单的文件内容复制。

我们看下源代码可以看出区别:主要是标红框的函数copystat和copymode

顺便说下copymode和copystat函数:

shutil.copymode() 和 shutil.copystat() 功能如下:

  1. shutil.copymode(src, dst)

shutil.copymode()函数用于复制源文件src的权限位到目标文件dst。比如特定的读取、写入或执行权限,但不会复制文件的内容、组或用户信息。
 

2. shutil.copystat(src, dst)

shutil.copystat()函数则用于复制源文件src的状态信息到目标文件dst,包括权限位、最后访问时间、最后修改时间和标志值。

举例:

import shutil
shutil.copy2('/Users/htsc/Desktop/dir1/dir2/1.txt','/Users/htsc/Desktop/dir1/dir2/2.txt',)
shutil.copy('/Users/htsc/Desktop/dir1/dir2/1.txt','/Users/htsc/Desktop/dir1/dir3/1.txt',)

复制文件夹

使用 shutil.copytree() 可以递归复制整个文件夹的内容到新文件夹,在 Python 3.8及以上版本中,shutil.copytree() 的函数参数如下:

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

参数说明:

  • src: 源目录路径。
  • dst: 目标目录路径。如果目录不存在,copytree() 会创建它。
  • symlinks: 如果为 True,则源目录中的符号链接将被复制为符号链接,而不是复制链接指向的文件或目录;默认为 False,此时会复制符号链接指向的文件或目录。
  • ignore: 一个可调用对象(如函数),它接受两个参数:源目录和目录中的文件列表,并应返回一个要忽略的文件名列表。这可以用来排除某些不需要复制的文件或目录。如果不提供,则默认复制所有文件和目录。
  • copy_function: 用于复制文件和目录的函数;默认为 shutil.copy2,
  • dirs_exist_ok: 如果目标目录已存在,设置此参数为 True ,允许 copytree 继续执行,而不是抛出 FileExistsError 异常。这个参数在 Python 3.8 版本中添加。

以下是部分源代码,可以看出这个函数一个大致工作流程: 先列出源目录的文件夹和文件内容,然后根据传入的ignore函数过滤不需要复制的内容,然后递归创建新目录,复制文件和目录到新目录。

ignore函数在shutil库中如下:

举例:复制dir2到dir3目录,过滤‘1.docx’的文档,传入ignore函数对象。

shutil.copytree('/Users/htsc/Desktop/dir1/dir2','/Users/htsc/Desktop/dir1/dir3',ignore=shutil.ignore_patterns('1.docx'),dirs_exist_ok=True)

结果如下:新目录dir3并没有1.docx文件。并且不会覆盖目标目录dir3的test文件夹。

移动文件或文件夹

使用 shutil.move() 可以移动文件或文件夹到目标文件夹;移动时会判断目标是目录还是文件,然后做不同处理。

举例:

  1. 将目录dir2移动到目标目录dir3中:

shutil.move('/Users/htsc/Desktop/dir1/dir2','/Users/htsc/Desktop/dir1/dir3')

执行后结果:

如果目标目录dir3中已经存在dir2目录,会报错

2 移动文件

将文件移动到新目录,如果新目录有同名文件会报错。如果没有重名文件,相当于复制一个文件到新目录,并rename改为新文件名字。

shutil.move('/Users/htsc/Desktop/dir1/dir2/1.txt','/Users/htsc/Desktop/dir1/dir3/3.txt')

删除文件或文件夹

shutil.rmtree() 可以递归地删除文件夹及其内容,包括为空或者不为空的内容。

参数说明:

  • path:要删除的目录的路径。
  • ignore_errors:如果设置为 True,则忽略删除过程中的错误(例如,如果某些文件或目录无法删除)。默认为 False,即遇到错误时会抛出异常。
  • onerror:一个处理错误的回调函数,它会在删除过程中遇到错误时被调用。该函数接受两个参数:一个异常实例和一个包含引发异常的路径名的元组。
#删除dir2目录下所有内容
shutil.rmtree('/Users/htsc/Desktop/dir1/dir2')

之前文章我们也介绍了os.rmdir()和os.removedirs()函数,区别是这两个函数不能删除非空目录,而shutil .rmtree就像是增强版的删除功能,当然两者在不同的使用场景下各有优劣。

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的关注,阅读和学习,您的支持就是我们最大的动力。

这篇关于python应用-shutil详解文件复制/移动/删除功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/925627

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#