当前位置: 首页 > news >正文

shutil模块详解

shutil模块提供了一系列高级文件操作功能,包括复制、移动、删除和搜索文件或目录。shutil 模块对压缩包的处理是调用 ZipFile 和 TarFile这两个模块来进行的。

下面详细介绍并给出示例代码:

1. shutil.copy(src, dst)

复制文件,但不保留权限和时间戳等元数据。

import shutilsrc = "source.txt"
dst = "destination.txt"shutil.copy(src, dst)
print(f"File copied from {src} to {dst}.")
2. shutil.copy2(src, dst)

复制文件并保留权限、时间戳等元数据。

import shutilsrc = "source.txt"
dst = "destination2.txt"shutil.copy2(src, dst)
print(f"File copied from {src} to {dst} with metadata.")
3. shutil.copyfileobj(fsrc, fdst)

从一个文件对象复制数据到另一个文件对象。通常用于大文件的复制,因为它可以避免一次性读取整个文件到内存中。

import shutil
import ossrc = "source.txt"
dst = "destination_fileobj.txt"with open(src, 'rb') as fsrc:with open(dst, 'wb') as fdst:shutil.copyfileobj(fsrc, fdst)
print(f"File copied from {src} to {dst} using copyfileobj.")
4. shutil.copyfile(src, dst)

复制文件的内容,但不包括元数据(如权限和时间戳)。与shutil.copy()类似,但不会复制文件的权限和时间戳。

import shutilsrc = "source.txt"
dst = "destination_file.txt"shutil.copyfile(src, dst)
print(f"File content copied from {src} to {dst} without metadata.")
区别:shutil.copyfile() vs shutil.copyfileobj()
  • copyfile():适用于文件路径,直接从源文件复制到目标文件。
  • copyfileobj():适用于文件对象,适合处理大文件或流式复制,因为它可以避免一次性加载整个文件到内存中。
5. shutil.copytree(src, dst)

递归复制目录及其所有子目录和文件。

import shutilsrc = "source_directory"
dst = "destination_directory"shutil.copytree(src, dst)
print(f"Directory {src} copied to {dst}.")
6. shutil.rmtree(path)

递归删除目录及其所有子目录和文件。

import shutilpath = "destination_directory"shutil.rmtree(path)
print(f"Directory {path} removed recursively.")
7. shutil.move(src, dst)

移动文件或目录,也可以用于重命名文件或目录。

import shutilsrc = "source.txt"
dst = "moved_source.txt"shutil.move(src, dst)
print(f"File {src} moved to {dst}.")
8. shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)

在PATH环境变量中查找可执行文件的位置。类似于Unix的which命令。

import shutilcmd = "python"result = shutil.which(cmd)
if result:print(f"{cmd} found at {result}")
else:print(f"{cmd} not found.")
9. shutil.copyfileobj(fsrc, fdst[, length])

从一个文件对象fsrc复制数据到另一个文件对象fdst。这通常用于大文件的复制,因为它可以避免一次性读取整个文件到内存中。

import shutilwith open('file1.txt', 'rb') as src:with open('file2.txt', 'wb') as dst:shutil.copyfileobj(src, dst)
10. shutil.copyfile(src, dst)

复制文件的内容,但不包括元数据(如权限、所有权和时间戳)。它直接从源文件路径复制到目标文件路径。

import shutilshutil.copyfile('file1.txt', 'file2.txt')
11. shutil.copymode(src, dst)

复制文件的模式(权限),但不复制文件内容或所有权。如果目标文件已存在,它的权限将被更新为与源文件相同。

import shutilshutil.copymode('file1.txt', 'file2.txt')
12. shutil.copystat(src, dst)

复制文件的所有状态信息,包括权限、组、用户和时间戳,但不包括文件内容。如果目标文件已存在,它的状态信息将被更新为与源文件相同。

import shutilshutil.copystat('file1.txt', 'file2.txt')
13. shutil.copy(src, dst)

复制文件的内容和权限。相当于先执行了copyfile再执行了copymode

import shutilshutil.copy('file1.txt', 'file2.txt')
14. shutil.copy2(src, dst)

复制文件的内容及其所有状态信息。相当于先执行了copyfile再执行了copystat

import shutilshutil.copy2('file1.txt', 'file2.txt')
15. shutil.copytree(src, dst[, symlinks=False[, ignore=None]])

递归复制整个目录树。symlinks参数决定是否复制符号链接,ignore参数可以指定一个函数来忽略某些文件或目录。

import shutilshutil.copytree('source_directory', 'destination_directory')
其他方法
  • shutil.move(src, dst)
    移动文件或目录。这类似于重命名操作,但可以在不同的文件系统之间移动。
import shutilshutil.move('file1.txt', 'new_directory/')
  • shutil.make_archive(base_name, format, root_dir[, base_dir[, owner[, group[, dry_run[, logger]]]]])
    创建存档文件,如zip或tar包。
import shutilshutil.make_archive('archive', 'zip', 'directory_to_compress')
  • shutil.unpack_archive(filename[, extract_dir[, format]])
    解压缩存档文件。
import shutilshutil.unpack_archive('archive.zip', 'extracted_directory')
  • shutil.which(cmd[, path])
    在环境变量PATH中查找可执行文件的位置,类似于Unix的which命令。
import shutilprint(shutil.which('python'))

通过以上示例,你应该能够理解和使用shutil模块中的一些关键方法。这些方法提供了比os模块更高级的文件和目录操作功能,适合于需要进行复杂文件管理的任务。

引用链接:Python模块——shutil模块详解_数据分析与统计学之美-GitCode 开源社区 (csdn.net)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 「豆包 Marscode 体验官」AI 加持的云端 IDE——三种方法高效开发前后端聊天交互功能
  • 《深入浅出多模态》之多模态经典模型:InstructBLIP
  • 4款堪称极品的神级Windows软件,良心无广,新电脑必装
  • 如何恢复iPhone相册里被删掉的照片?别慌!这几招帮你恢复删掉的照片
  • 宝宝护眼灯哪个牌子好?真实曝光五款宝宝护眼灯测评细节
  • C++中的内存管理和模板初识
  • A Single Generic Prompt forSegmenting Camouflaged Objects
  • C#程序 Debugger,Release都没问题,但是,打包安装后:System.FormatException: 输入字符串的格式不正确
  • Linux线程概念
  • 多云架构下大模型训练的存储稳定性探索
  • vue3页面组件中怎么获取上一个页面的路由地址
  • 八叉树,分裂空间的魔法师【Unity】
  • 【开发环境搭建】Macbook M1搭建Java开发环境
  • 二维背包问题(C++)
  • C++入门9——list的使用
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • ESLint简单操作
  • IP路由与转发
  • javascript 总结(常用工具类的封装)
  • JavaScript设计模式系列一:工厂模式
  • Object.assign方法不能实现深复制
  • Python - 闭包Closure
  • redis学习笔记(三):列表、集合、有序集合
  • Swift 中的尾递归和蹦床
  • underscore源码剖析之整体架构
  • Vue 2.3、2.4 知识点小结
  • 大快搜索数据爬虫技术实例安装教学篇
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 关于Java中分层中遇到的一些问题
  • 解析带emoji和链接的聊天系统消息
  • 前端技术周刊 2019-02-11 Serverless
  • 前端临床手札——文件上传
  • 如何使用 JavaScript 解析 URL
  • 如何在GitHub上创建个人博客
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 选择阿里云数据库HBase版十大理由
  • # Redis 入门到精通(七)-- redis 删除策略
  • # 飞书APP集成平台-数字化落地
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (小白学Java)Java简介和基本配置
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • *p++,*(p++),*++p,(*p)++区别?
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET Micro Framework初体验(二)