shutil模块详解

news2025/1/11 17:12:16

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

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

1. shutil.copy(src, dst)

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

import shutil

src = "source.txt"
dst = "destination.txt"

shutil.copy(src, dst)
print(f"File copied from {src} to {dst}.")
2. shutil.copy2(src, dst)

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

import shutil

src = "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 os

src = "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 shutil

src = "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 shutil

src = "source_directory"
dst = "destination_directory"

shutil.copytree(src, dst)
print(f"Directory {src} copied to {dst}.")
6. shutil.rmtree(path)

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

import shutil

path = "destination_directory"

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

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

import shutil

src = "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 shutil

cmd = "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 shutil

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

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

import shutil

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

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

import shutil

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

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

import shutil

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

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

import shutil

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

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

import shutil

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

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

import shutil

shutil.copytree('source_directory', 'destination_directory')
其他方法
  • shutil.move(src, dst)
    移动文件或目录。这类似于重命名操作,但可以在不同的文件系统之间移动。
import shutil

shutil.move('file1.txt', 'new_directory/')
  • shutil.make_archive(base_name, format, root_dir[, base_dir[, owner[, group[, dry_run[, logger]]]]])
    创建存档文件,如zip或tar包。
import shutil

shutil.make_archive('archive', 'zip', 'directory_to_compress')
  • shutil.unpack_archive(filename[, extract_dir[, format]])
    解压缩存档文件。
import shutil

shutil.unpack_archive('archive.zip', 'extracted_directory')
  • shutil.which(cmd[, path])
    在环境变量PATH中查找可执行文件的位置,类似于Unix的which命令。
import shutil

print(shutil.which('python'))

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2124943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【程序员必读】如何用AI修复代码Bug,让你节省宝贵的调试时间!

在编程的旅程中,bug就像是我们前行路上的小石子,时不时地绊倒我们。无论你是刚入门的编程新手,还是经验丰富的开发者,调试代码时总会遇到各种各样的挑战。😩 有时候,错误的信息可能模糊不清,令…

SAP PP模块后台配置全流程配置2

1.1.定义工艺路线 定义物料类型分配T-Code:OP50 为物料类型指定工艺路线类型 为物料类型HALF2、FERT2分配类型“路径N” 定义工艺路线CA01 1.1.2.1.定义HAL2类型:物料2000000000工艺路线 输入“物料编码”、“工厂”等信息 工艺路线:抬头信…

国家标准和行业标准有什么区别?如何办理国家标准?

在当今复杂多样的标准体系中,国家标准和行业标准犹如两颗璀璨的明珠,各自闪耀着独特的光芒,它们共同为经济社会的发展提供了坚实的技术支撑。然而,你是否真正了解这两者之间的区别呢? 一、制定主体 • 国家标准&#x…

0基础?没问题!吴恩达教授的《开发者的LLM入门完全指南》来了!

项目:面向开发者的 LLM 入门课程 这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 ## 项目简介 本项目是一个面向开发者的 LLM 入门教程,基于吴恩达老师大模型系列课…

问题:vite首次加载慢

概述: 不是说vite项目的启动很快很快吗? vite项目的启动确实是快(注意这里的启动是指命令行启动完毕,不是指启动完之后首页加载完毕) 如果某个界面是首次进入,且依赖比较多/比较复杂的话,那…

温习mysql函数 连接查询

字符串 1、CONCAT(S1,S2,...Sn) :字符串拼接,将S1 , S2 , ... Sn 拼接成一个字符串】 2、LOWER(str) :将字符串str全部转为小写 3、UPPER(str) :将字符串str全部转为大写 4、LPAD(str,n,pad): …

基于SpringBoot+Vue+MySQL的教学资源共享平台

系统展示 用户前台界面 管理员后台界面 系统背景 随着信息技术的迅猛发展,教育领域对高效、便捷的教学资源需求日益增长。传统教学模式已难以满足当前教育的多样化需求,特别是在资源共享与利用方面存在明显不足。因此,构建一个基于SpringBoot…

关于大模型在产品开发中所面临的问题,利用大模型技术解决很简单!

“ 具体问题具体分析,大模型技术没有统一的解决方案 ” 有人说2024年是大模型应用的元年,而大模型在未来的发展潜力毋庸置疑,这也就意味着人工智能技术是下一个风口,因此各种各样基于大模型技术的创业公司如雨后春笋般涌现。 从…

Linux云计算 |【第二阶段】SHELL-DAY5

主要内容: awk命令、内置变量(FS、$0、$1、$2、NF、NR)、过滤时机(BEGIN{}、{}、END{})、处理条件(正则、&&、||、~\!~、等)、awk数组、监控脚本、安全检测脚本 一、awk介绍 awk 是一…

【主机入侵检测】Wazuh解码器详解

前言 Wazuh 是一个开源的安全平台,它使用解码器(decoders)来从接收到的日志消息中提取信息。解码器将日志信息分割成字段,以便进行分析。Wazuh解码器使用XML语法,允许用户指定日志数据应该如何被解析和规范化。解码器的…

TP发邮件的功能如何实现?tp框架发送邮件?

tp发邮件系统如何设置发信?tp配置邮箱发送邮件方法? TP发邮件的功能,作为企业级应用中的一个关键模块,其稳定性和高效性直接影响到企业的日常运营。AokSend将深入探讨TP发邮件的功能如何实现,从基础配置到高级应用&am…

监控易监测对象及指标之:全面监控Oracle数据库

随着企业业务的不断增长和复杂化,Oracle数据库作为关键的业务数据管理系统,其性能和稳定性对于保障业务连续性至关重要。为了确保Oracle数据库的高效运行和稳定性能,对其进行全面监控成为了一项必要的工作。本文将基于监控易工具,…

搭建大模型知识库流程,以及基于langchain实现大模型知识库案例

“ RAG检索增强生成是为了解决大模型知识不足的问题 ” 大模型主要面临三个问题: 垂直领域内的知识不足 大模型知识有时间限制 大模型幻觉问题 第一个问题产生的原因是因为,没有经过垂直领域数据训练的大模型普遍表现不好;其次是目前的大…

新160个crackme - 054-vcrkme01

运行分析 需破解Name和Code PE分析 C程序,32位,无壳 静态分析&动态调试 ida找到关键字符串,双击进入函数 主函数静态分析,注释如上,还需要了解sub_401000函数 对sub_401000函数进行分析,注释如上&#…

半导体设备系列(2) 半导体设备与工厂控制仿真器Demo编写

可以用CS架构编写这两个仿真器,将设备写成服务器,接收来自工厂控制程序的命令。后续加上半导体设备通信协议。 半导体设备服务器 1)工程文件 QT core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You ca…

linux 操作系统下的convertquota命令介绍和使用案例

linux 操作系统下的convertquota命令介绍和使用案例 convertquota命令介绍 convertquota是Linux系统中用于转换旧格式的用户和组配额文件的命令。它可以将旧格式的quota.user和quota.group文件转换为新格式的aquota.user和aquota.group文件。新格式的配额文件支持32位的uid/g…

有关WSL和docker的介绍

目录标题 如何利用在windows上配置docker实现linux和windows容器修改WSL默认安装(也就是linux子系统)目录到其他盘 如何利用在windows上配置docker实现linux和windows容器 wsl的基本命令:参考网页 docker入门到实践:参考网页 官方…

深度学习基础--卷积网络

图像的三个特性指出了专门模型架构的必要性。 首先,图像是高维的,一个用于分类任务的典型图像含有 224224 RGB 值(即,150528 个输入维度)。在全连接网络中,隐藏层的规模通常超过输入大小,因此&a…

uniapp中使用uni.$emit和uni.$on在vue和nvue页面之间传值但是无法赋值的问题

背景:我们在vue页面和nvue页面之间进行传值可以使用uni.$emit和uni.$onsh事件监听实现,官网描述:uni-app官网 (dcloud.net.cn)https://uniapp.dcloud.net.cn/api/window/communication.html#emit 而且官网上也明确说明了: 一、问…

SLMi33x系列SLMi330HCG-DG具有主动保护功能 兼容光耦的单通道带保护功能的隔离驱动器

SLMi33x系列SLMi330HCG-DG优势和亮点:国内首款带DESAT保护功能并兼容光耦驱动的IGBT/SiC隔离驱动器,5kVrms隔离电压和高达10kV的隔离浪涌电压,CMTI超过100kV/us SLMi330HCG-DG内置快速去饱和(DESAT) 故障检测功能、米勒钳位功能、漏极开路故…