python中的shutil和zipfile模块(涉及文件的拷贝以及解压缩)

举报
乂氼S 发表于 2023/06/07 16:29:00 2023/06/07
【摘要】 python文件操作处理之文件的拷贝、压缩及解压缩

本文主要涉及两个模块:

shutil(提供了相比于os更高级的文件处理)、zipfile模块

shutil模块

==好,接下来我们介绍一个新的模块shutil。这个独立的模块也是我们Python库下面的一个模块。它呢,帮助我们提供了更多的关于这个文件的拷贝以及压缩这样的一些操作。相当于是对这个OS模块的一个补充。所以呢,今天也主要是介绍拷贝和压缩解压缩这两部分内容。==
shutil模块(拷贝和压缩)

  • shutil模块是python标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等:还可以做文件和文件夹的压缩、解压缩操作。
  • os模块提供了对目录或文件的一般操作。shutil模块作为补充,提供了移动、复制、压缩、解压等操作,这些os模块都没有提供。
  • shutil模块是Python标准库中的一个模块,提供了许多对文件和文件夹进行操作的函数。它可以用于复制、移动、重命名和删除文件,以及创建、删除和遍历文件夹等操作。下面是一些shutil模块的常用功能:
  1. 文件操作:

    • shutil.copy(src, dst):复制文件从源路径src到目标路径dst。
    • shutil.move(src, dst):移动文件或重命名文件。
    • shutil.copy2(src, dst):复制文件,并尽量保留文件元数据(例如访问时间和权限)。
    • shutil.copyfile(src, dst):仅复制文件内容,不复制元数据。
    • shutil.copytree(src, dst):递归地复制整个目录树。
    • shutil.rmtree(path):递归地删除整个目录树。
    • shutil.chown(path, user=None, group=None):更改文件或目录的所有者。
  2. 压缩和解压缩:

    • shutil.make_archive(base_name, format, root_dir):创建压缩文件,支持多种格式(例如zip、tar等)。
    • shutil.unpack_archive(filename, extract_dir):解压缩文件到指定目录。
  3. 其他功能:

    • shutil.disk_usage(path):获取指定路径的磁盘使用情况信息。
    • shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None):查找可执行程序的路径。
  • 此外,shutil模块还提供了一些其他辅助函数,如shutil.get_terminal_size()用于获取终端的大小,以及shutil.ignore_patterns(*patterns)用于创建一个函数,用于在复制目录时忽略特定的文件或文件夹模式。

  • 总之,shutil模块提供了一组强大而方便的函数,用于处理文件和文件夹操作。它是Python中常用的标准库之一,使得文件操作变得简单和高效。


  • 跳转到shutil模块的压缩的函数对象,来理解几个参数所代表的含义

  • 在这里插入图片描述

  • 几个常用的参数所代表的意思

  • base_name 压缩包的文件名,也可以是压缩包的路径,只是文件名时,则保存至当前目录,否则保存指定路径
    data_bak 保存当前路径
    format 压缩包种类 zip tar bztar gztar
    root_dir 要压缩的文件路径
    owner 用户
    group 用户组
    logger 用于记录日志


zipfile模块

  • 当使用Python进行处理和操作ZIP文件时,可以使用zipfile模块。该模块提供了一种简便的方式来创建、读取和解压缩ZIP文件。

下面是zipfile模块的一些常见功能和用法:

  1. 打开ZIP文件:

    import zipfile
    
    # 打开ZIP文件
    with zipfile.ZipFile('archive.zip', 'r') as zip_ref:
        # 在这里进行操作
    

    使用ZipFile类的构造函数,你可以打开一个ZIP文件进行操作。第一个参数是ZIP文件的路径,第二个参数是打开模式('r’表示只读)。

  2. 获取ZIP文件中的文件列表:

    with zipfile.ZipFile('archive.zip', 'r') as zip_ref:
        file_list = zip_ref.namelist()
        print(file_list)
    

    使用namelist方法可以获取ZIP文件中包含的所有文件的列表。

  3. 解压缩ZIP文件中的文件:

    with zipfile.ZipFile('archive.zip', 'r') as zip_ref:
        zip_ref.extractall('destination_folder')
    

    使用extractall方法可以将ZIP文件中的所有文件解压缩到指定的目标文件夹。

  4. 解压缩ZIP文件中的单个文件:

    with zipfile.ZipFile('archive.zip', 'r') as zip_ref:
        zip_ref.extract('file.txt', 'destination_folder')
    

    使用extract方法可以解压缩ZIP文件中的指定文件到指定的目标文件夹。

  5. 创建ZIP文件并添加文件:

    with zipfile.ZipFile('new_archive.zip', 'w') as zip_ref:
        zip_ref.write('file1.txt')
        zip_ref.write('file2.txt')
    

    使用write方法可以将指定的文件添加到新创建的ZIP文件中。
    以上是zipfile模块的一些基本用法。


实战

# coding: utf-8  
# 测试shutil模块的用法,拷贝,压缩及解压缩  
  
import shutil  
import zipfile  
  
shutil.copyfile('1.txt', '1_copy.txt') # 拷贝文件  
  
shutil.copytree(r'D:\pythonlearn\01-阶段一:python基础入门\第05周python模块与文件操作\test_shutil\move', '电影') # 拷贝目录(绝对路径下的最后一层目录),注意如果指定拷贝到的路径已存在则会报错FileExistsError,只能拷贝到一个不存在的目录,因为怕覆盖原目录  
  
shutil.copytree('move', '电影', ignore=shutil.ignore_patterns('*.txt', '*.html')) # ignore可以定义那些文件不拷贝(*代表匹配所以文件,加个.txt就是所有的txt后缀的文件)  
  
  
# 压缩  
  
# 它只能用于压缩,解压缩还需要用到zipfile模块  
shutil.make_archive(r'电影/zip_test', 'zip', 'move') # 第一个参数是指定压缩包所在的位置以及名字,第二个是压缩的格式,第三个参数是你要压缩的内容  
z1 = zipfile.ZipFile('a.zip', 'w') # 生成一个a.zip的这样一个压缩包,然后接下来往里面打入需要压缩的文件  
z1.write(r'1.txt')  
z1.write(r'1_copy.txt')  
z1.close() # 压完之后关闭  
  
  
# 解压缩  
z2 = zipfile.ZipFile('a.zip', 'r')  
z2.extractall('电影')  
z2.close()```
输出结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/62570774d17f46fa89ed687c17046c71.png#pic_center)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。