python基础-10-组织文件

news2025/4/5 21:04:32

文章目录

  • 【README】
  • 【10】组织文件(复制+移动+删除+重命名)
    • 【10.1】shutil模块(shell工具)
      • 【10.1.1】复制文件和文件夹
        • 【10.1.1.1】复制文件夹及其下文件-shutil.copytree
      • 【10.1.2】文件和文件夹的移动与重命名
      • 【10.1.3】永久删除文件和文件夹
      • 【10.1.4】用send2trash模块安全删除
    • 【10.2】遍历目录树-os.walk()
    • 【10.3】用zipfile模块压缩文件
      • 【10.3.1】读取zip文件
      • 【10.3.2】从zip文件中解压缩
      • 【10.3.3】创建和添加到zip文件

【README】

本文总结自《python编程快速上手-让繁琐工作自动化》第10章,非常棒的一本书,墙裂推荐;



【10】组织文件(复制+移动+删除+重命名)

【10.1】shutil模块(shell工具)

1)shell模块包含一些函数,用于复制,移动,重命名和删除文件;


【10.1.1】复制文件和文件夹

1)shutil.copy(src,des):把src路径下的文件复制到des路径下,其中src与des都是字符串;若des是一个文件名,则它将作为被复制文件的新名字;

  • 该函数返回一个字符串,表示被复制文件的路径;(注意:shutil.copy仅复制文件,不能复制文件夹

2)把当前路径下的src文件夹下的src01.txt文件复制到当前文件夹下的target文件夹下,且复制后的文件名与原文件名保持一致:

# 把当前路径下的src文件夹下的src01.txt文件复制到当前文件夹下的target文件夹下;
copyResult = shutil.copy(Path.cwd() / 'src/src01.txt', Path.cwd() / 'target')
print(copyResult)
# D:\studynote\00-ai-llm\workbench\PythonBasicStudy\chapter10\target\src01.txt

3)把当前路径下的src文件夹下的src01.txt文件复制到当前文件夹下的target文件夹下,且指定复制后的文件名为src01_copy.txt

copyResult2 = shutil.copy(Path.cwd() / 'src/src01.txt', Path.cwd() / 'target/src01_copy.txt')
print(copyResult2)
# D:\studynote\00-ai-llm\workbench\PythonBasicStudy\chapter10\target\src01_copy.txt

【10.1.1.1】复制文件夹及其下文件-shutil.copytree

1)shutil.copytree: 把src路径表示的文件夹及其子文件夹及所有文件一并复制到des文件夹下;shutil.copytree会创建des文件夹,若des存在则抛出异常;

# 复制文件夹及其下文件-shutil.copytree
# 先删除目的地文件夹
force_remove_dir('target_backup')
# 复制到目的地文件夹
copyDirResult = shutil.copytree(Path.cwd() / 'target', Path.cwd() / 'target_backup')
print(copyDirResult)
# D:\studynote\00-ai-llm\workbench\PythonBasicStudy\chapter10\target_backup

【10.1.2】文件和文件夹的移动与重命名

1)shutil.move(src, des): 把src路径表示的文件夹移动到des路径下;一共分为4种情况:

  • 情况1:src是文件夹名,des是文件夹名;等同于移动文件夹并重命名文件夹;
  • 情况2:src是文件名,des是文件夹名;等同于把文件剪切到文件夹;
  • 情况3:src是文件名,des是文件名; 等同于移动文件并重命名文件;

情况1:src是文件夹名,des是文件夹名;等同于移动文件夹并重命名文件夹;

# 情况1:src是文件夹名,des是文件夹名;等同于移动文件夹并重命名文件夹;
# 先删除目的地文件夹
force_remove_dir('target_backup2')
tempResult = shutil.move(Path.cwd() / 'target_backup', Path.cwd() / 'target_backup2')
print(tempResult)
# D:\studynote\00-ai-llm\workbench\PythonBasicStudy\chapter10\target_backup2

# 强行删除文件夹 
def force_remove_dir(temp_path):
    if os.path.exists(temp_path):
        shutil.rmtree(temp_path)

情况2:src是文件名,des是文件夹名;等同于把文件剪切到文件夹;

# 情况2: 情况2:src是文件名,des是文件夹名;等同于把文件剪切到文件夹
tempResult = shutil.move(Path.cwd() / 'target_backup3/src03.txt', Path.cwd() / 'move_dir')
print(tempResult)
# D:\studynote\00-ai-llm\workbench\PythonBasicStudy\chapter10\move_dir\src03.txt

情况3:src是文件名,des是文件名; 等同于移动文件并重命名文件;

# 情况3:src是文件名,des是文件名; 等同于移动文件并重命名文件;
tempResult = shutil.move(Path.cwd() / 'target_backup3/src03_A.txt', Path.cwd() / 'move_dir/src03_A_moved.txt')
print(tempResult)
# D:\studynote\00-ai-llm\workbench\PythonBasicStudy\chapter10\move_dir\src03_A_moved.txt

在这里插入图片描述

2)使用shutil.move()函数的注意点:

  • 如果目标文件夹不存在,则move()会把原文件重命名为目标文件夹的名称;
# 情况4: src是文件名,des是文件夹名称;但des不存在, 则把src表示的文件重命名为des(把target_backup3/src03_C.txt文件重命名为./move_dir2)
tempResult = shutil.move(Path.cwd() / 'target_backup3/src03_C.txt', Path.cwd() / 'move_dir2')
print(tempResult)
# D:\studynote\00-ai-llm\workbench\PythonBasicStudy\chapter10\move_dir2

【提醒】move函数中目的地路径的各层级目录必须存在,否则pyhon抛出异常;


【10.1.3】永久删除文件和文件夹

1)删除文件和文件夹api:

  • os模块:使用os模块中的函数,可以删除一个文件或一个空文件夹;

    • os.unlink(path) : 删除path路径表示的文件;
    • os.rmdir(path): 删除path路径表示的文件夹;该文件夹必须是空的, 不能有任何文件或文件夹;
  • shutil模块:删除一个文件夹及其所有的 内容;

    • shutil.rmtree(path): 删除path路径表示的文件夹,它包含的所有文件及其下各层级子文件夹都会被删除;
    # 删除文件夹与其下各层级文件夹及文件
    def force_remove_dir(temp_path):
        if os.path.exists(temp_path):
            shutil.rmtree(temp_path)
    
    # 强行删除一个文件
    def force_remove_file(temp_path):
        if os.path.exists(temp_path):
            os.remove(temp_path) # os.remove() 等同于 os.unlink()
    
    # 删除文件夹delete_dir_a与其下各层级文件夹及文件
    force_remove_dir(Path.cwd() / "delete_dir_a")
    

    【10.1.4】用send2trash模块安全删除

    1)shutil.rmtree():不可恢复删除文件及文件夹;

    2)推荐的方法是:使用send2trash模块,把文件夹和文件发送到回收站,而不是永久删除它们;

    import send2trash
    
    # 使用send2trash模块,把文件夹和文件发送到回收站,而不是永久删除它们
    tempResult = send2trash.send2trash("send2trash_test_dir")
    print(tempResult)
    # None
    

    【10.2】遍历目录树-os.walk()

1)os.walk(dirPath):被传入一个文件夹路径,遍历该文件夹下的子文件夹及文件;

2)os.walk(dirPath)返回以下3个值(当前文件夹指的是:for循环时迭代的文件夹):

  • 当前文件夹名称的字符串;
  • 当前文件夹中子文件夹的字符串列表;
  • 当前文件夹中文件的字符串列表;

3)遍历 src文件夹下的子文件夹列表及文件列表;

在这里插入图片描述

# 使用os.walk()遍历文件夹下的子文件夹及文件
import os
from pathlib import Path
root_dir = Path.cwd() / "src"
for cur_dir, sub_dirs, sub_files in os.walk(root_dir):
    print("当前文件夹=" + cur_dir)
    print("子文件夹列表=" + str(sub_dirs))
    print("子文件列表=" + str(sub_files))
    print("========== 我是分隔符 ==========")

【遍历结果】

当前文件夹=D:\studynote\00-ai-llm\workbench\PythonBasicStudy\chapter10\src
子文件夹列表=['child01']
子文件列表=['src01.txt', 'src03.txt', 'src03_A.txt']
========== 我是分隔符 ==========
当前文件夹=D:\studynote\00-ai-llm\workbench\PythonBasicStudy\chapter10\src\child01
子文件夹列表=[]
子文件列表=['child01.txt']
========== 我是分隔符 ==========

【10.3】用zipfile模块压缩文件

【10.3.1】读取zip文件

1)读取zip文件,必须创建一个zip文件对象,使用 zipFile.ZipFile(文件名)创建一个Zip文件对象;

import zipfile, os
from pathlib import Path

# 读取zip文件
print("====== 读取zip文件 ======")
tempZip01 = zipfile.ZipFile(Path.cwd() / 'zipfile01.zip')
fileList = tempZip01.namelist()
print(str(fileList))
# ['zipfile01/a.txt', 'zipfile01/b.txt', 'zipfile01/']
print(type(fileList))
# <class 'list'>

for fileName in fileList:
    tempFile = tempZip01.getinfo(fileName)
    print(str(tempFile))
    print(tempFile.file_size)
    print(tempFile.compress_size)
    print("=== 我是分隔符 === ")
# 关闭zip文件
tempZip01.close()

【运行结果】

====== 读取zip文件 ======
['zipfile01/a.txt', 'zipfile01/b.txt', 'zipfile01/']
<class 'list'>
<ZipInfo filename='zipfile01/a.txt' external_attr=0x20 file_size=21>
21
21
我是分隔符
<ZipInfo filename='zipfile01/b.txt' external_attr=0x20 file_size=21>
21
21
我是分隔符
<ZipInfo filename='zipfile01/' external_attr=0x10>
0
0
我是分隔符

【10.3.2】从zip文件中解压缩

1)zipfile的extractAll方法从zip文件中解压缩所有文件和文件夹,并将其放入当前目录中; 若指定了目标文件夹(目录 ),则解压缩到目标文件夹中;

print("====== 从zip文件中解压缩所有文件 ======")
tempZip01 = zipfile.ZipFile(Path.cwd() / 'zipfile01.zip')
tempZip01.extractall(Path.cwd() / 'target_extract')
tempZip01.close()

在这里插入图片描述

2)使用extract函数解压缩单个文件:传入的文件名,必须是namelist()返回的列表中的元素; 可以向extract传入第2个参数,用于表示目标文件夹;若目标文件夹不存在,则新建;也可以不传入第2个参数,则目标文件夹默认是当前文件夹;

print("====== 从zip文件中解压缩单个 ======")
tempZip01 = zipfile.ZipFile(Path.cwd() / 'zipfile01.zip')
result = tempZip01.extract("zipfile01/a.txt", Path.cwd() / 'target_extract')
print(result)
# D:\studynote\00-ai-llm\workbench\PythonBasicStudy\chapter10\chapter10_03\target_extract\zipfile01\a.txt
tempZip01.close()

【10.3.3】创建和添加到zip文件

1)使用不同模式打开zi文件:

  • 使用写模式打开zip文件,第2个参数传入w;
  • 使用追加模式打开zip文件,第2个参数传入a;
# 10.3.3 创建和添加到zip文件
print("====== 创建和添加到zip文件 ======")
tempZip02 = zipfile.ZipFile(Path.cwd() / 'zipfile02.zip', "w")
tempZip02.write("10_03.py", compress_type=zipfile.ZIP_DEFLATED)
tempZip02.close()

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

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

相关文章

ORA-09925 No space left on device 问题处理全过程记录

本篇文章关键字&#xff1a;linux、oracle、审计、ORA-09925 一、故障现像 朋友找到我说是他们备份软件上报错。 问题比较明显&#xff0c;ORA-09925&#xff0c;看起来就是空间不足导致的 二、问题分析过程 这里说一下逐步的分析思路&#xff0c;有个意外提前说一下就是我…

多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测

多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测 目录 多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测&#…

27信号和槽_自定义信号(2)

自定义信号和槽 绑定信号和槽 如何才能触发出自定义的信号呢?&#xff08;上诉代码只是将信号和槽绑定在一起&#xff0c;但并没有触发信号&#xff09; Qt 内置的信号,都不需要咱们手动通过代码来触发 用户在 GUI, 进行某些操作,就会自动触发对应信号.(发射信号的代码已经内置…

人工智能在生物医药领域的应用地图:AIBC2025将于6月在上海召开!

人工智能在生物医药领域的应用地图&#xff1a;AIBC2025将于6月在上海召开&#xff01; 近年来&#xff0c;人工智能在生物医药行业中的应用受到广泛关注。 2024年10月&#xff0c;2024诺贝尔化学奖被授予“计算蛋白质设计和蛋白质结构预测”&#xff0c;这为行业从业人员带来…

2025.3.19

1、用vim编辑/etc/hosts文件&#xff0c;将本机和第二个虚拟机的ip地址和主机名写入该文件&#xff0c;然后ping 两个主机的主机名能否ping通&#xff1b; &#xff08;1&#xff09;在第一个虚拟机编辑/etc/hosts: 首先使用hostname、hostnamectl、hostname -f指令查看主机名…

深度学习 Deep Learning 第16章 结构化概率模型

深度学习 Deep Learning 第16章 结构化概率模型 内容概要 本章深入探讨了结构化概率模型&#xff08;Graphical Models&#xff0c;包含有向图和无向图模型&#xff09;的概念及其在深度学习中的应用。结构化概率模型通过图结构描述随机变量之间的直接交互&#xff0c;从而简…

鸿蒙 harmonyOS 网络请求

应用通过HTTP发起一个数据请求&#xff0c;支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 第一步 &#xff1a; 在module.json5文件里面添加网络…

进程概念(Linux)

目录 一. 冯诺依曼体系结构 二. 操作系统(OS(操作系统的英文缩写Operator System)) 2.1概念 2-2 设计OS的目的 2.3 核心功能 2.4 如何管理&#xff08;先描述再组织&#xff09; 2.5 系统调用和库函数概念 三.进程 3.1 基本概念与基本操作 3.2 描述进程-PCB 3.3 如何…

免费在线MBTI性格测试工具 - 探索你的性格特质

免费在线MBTI性格测试工具 - 探索你的性格特质 简介 我很高兴为大家分享这个专业的MBTI性格测试工具。这是一个完全免费的在线测试系统&#xff0c;基于迈尔斯-布里格斯类型指标(MBTI)理论开发&#xff0c;旨在帮助您更好地了解自己的性格特征&#xff0c;发现职业发展方向。…

AI 数理逻辑基础之统计学基本原理(上)

目录 文章目录 目录统计学统计学基本概念描述性统计数据可视化图表工具 汇总统计统计数据的分布情况&#xff1a;中位数、众数、平均值统计数据的离散程度&#xff1a;极差、方差、标准差、离散系数 相关分析Pearson 线性关系相关系数Spearman 单调关系相关系数 回归分析回归模…

积分赛——读取实时时间

设计要求 调用DS1302芯片驱动程序&#xff0c;读取DS1302中的实时时分秒数据&#xff0c;并显示在数码管上。 23时59分59秒 通过串口发送时间作为定时时间&#xff0c;定时时间到则蜂鸣器响2s后静音。 串口发送格式&#xff1a;“12&#xff1a;35&#xff1a;66”。 备注&…

进程和线程的概念及Linux操作

文章目录 一、进程与线程1、进程2、线程3、查看进程与线程 二、Linux的“虚拟内存管理”&#xff0c;它与stm32中的 真实物理内存&#xff08;内存映射&#xff09;有什么区别&#xff1f;三、Linux系统调用函数 fork()、wait()、exec() 等1、fork&#xff08;&#xff09;函数…

APang网联科技项目报告【服务器篇】

APang网联科技&#xff1a;连接未来&#xff0c;智能领航 公司简介 APang网联科技成立于 [2005年]&#xff0c;总部位于 [广东深圳]&#xff0c;是一家集网络技术研发、系统集成、项目实施与运维服务为一体的高新技术企业。我们致力于为客户提供全方位、定制化的网络部署解决…

[MySQL初阶]MySQL表的操作

MySQL表的操作 1. 创建表2. 查看表结构3. 修改表&#xff08;修改表的属性而非表的数据&#xff09;4. 删除表 1. 创建表 语法&#xff1a; CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储…

AI助力高效PPT制作:从内容生成到设计优化

随着人工智能技术的不断发展&#xff0c;AI在各个领域的应用日益普及&#xff0c;尤其是在文档和演示文稿的创建过程中。PowerPoint&#xff08;PPT&#xff09;作为最常用的演示工具之一&#xff0c;借助AI的技术手段&#xff0c;可以极大地提高制作效率并提升最终呈现效果。在…

《双影奇境》手机版上线?ToDesk用跨平台技术实现「全设备云电脑3A游戏」

《双影奇境》是由Hazelight Studios研发发行的一款双人合作冒险类游戏&#xff0c;玩家们在游戏中将扮演米欧和佐伊两位风格迥异的女作家&#xff0c;剧情讲述的是她们被骗进入一台意在窃取创意的机器后便陷入了自己创作的故事之中&#xff0c;并且必须相互依靠&#xff0c;努力…

spring IOC 反射 bean生命周期

目录 反射 反射三种方式 获取反射中的Class对象 通过反射创建类对象 通过反射获取类属性、方法、构造器 IOC 概念 原理 实现方式 基于 XML 配置 基于注解配置 IOC优点 IOC的初始化过程 1. 资源定位 3. Bean 定义注册 4. BeanFactory 后置处理 5. Bean 后置处理…

Pytorch中预置数据集的加载方式

Pytorch中数据集加载方式 数据类型​PyTorch 模块​是否预置数据集图像/视频torchvision.datasets✅ 是音频torchaudio.datasets✅ 是文本torchtext.datasets✅ 是&#xff08;需安装&#xff09;自定义数据torch.utils.data❌ 否&#xff08;需手动实现&#xff09;多模态/第三…

ARM-----数据处理、异常处理、模式切换

实列一&#xff1a; 1. 异常向量表 area reset, code, readonly code32 entry area reset, code, readonly&#xff1a;定义一个名为reset的代码区域&#xff0c;只读。 code32&#xff1a;指示编译器生成32位ARM指令。 entry&#xff1a;标记程序的入口点。 2. 程序入口…

d202541

目录 一、分隔链表 二、旋转链表 三、删除链表中重复的数字 一、分隔链表 用两个list存一下小于和大于等于 x的节点 最后串起来就行 public ListNode partition(ListNode head, int x) {ListNode ret new ListNode(1);ListNode cur ret;List<ListNode> small new A…