python常用标准库(压缩包模块zipfile和tarfile)

常用标准库

在我们常用的系统和Linux系统中支持的压缩包格式有很多,包括但不限于以下几种:rar、zip、tar,以下标准库的作用是用于压缩和压缩的压缩包解压缩其中一些格式。

压缩格式

模块操作 压缩包使用类来操作。 a 四种操作模式。基本步骤大致分为三个步骤:打开文件、操作文件、关闭文件。上下文自动化可以使用 with 语法来完成。

注1:rwxa也有四种模式,也就是说文件操作中也会有游标指针的概念。

注2:在 中,几乎所有与文件相关的操作都是三个步骤:打开、操作、关闭。

参数说明

语法:(file, mode=’r’, =, =True)

参数含义

文件

文件路径

模式

操作含义与文件操作中相同,默认为r。

压缩方式,默认是。

操作的压缩文件大小大于2G时应该为True,默认为True,不用管。

操作含义模式含义

w

创建一个新的存档文件。

r

读取现有的 zip 文件。

一个

将文件压缩成现有的 zip 文件。

压缩方式

从上面的参数可以看出,默认的压缩方式是 .其实在模块中定义了一些压缩方法常量,最常用的有以下两种:

ZIP_STORED = 0  # 打包归档(不压缩)
ZIP_DEFLATED = 8  # 压缩文件(压缩)

注意,压缩方式是指将文件写入到压缩包中使用的方式,所以如果文件解压,则无需指定此压缩方式。

常用方法write——指定要写入压缩包的文件(压缩文件)

语法:write(, =None)

语法:write( file) Path,写入压缩包后的路径和名称(默认原名))

如果文件写入文件夹,文件夹的内容不会一起写入。

close — 关闭对象(保存文件)

这是我要压缩的文件夹。

使用压缩。

import zipfile
# 文件路径
zip_file_path = r'D:test.zip'  # 压缩包路径
file_path = r'D:10-中日欧美信息解析'  # 被压缩文件
# 默认使用ZIP_STORED
zf = zipfile.ZipFile(zip_file_path, 'w')
# 写入文件(文件夹的话,不会将文件夹中的文件一同写入)
zf.write(file_path)
# 关闭文件

图片[1]-python常用标准库(压缩包模块zipfile和tarfile)-唐朝资源网

zf.close()

可以看到,如果直接压缩文件夹,里面的文件是不会一起压缩的。

迭代地将文件夹中的所有文件写入存档。

import os
import zipfile
def writeZip(zf, file, arc_path=None):
    """迭代压缩文件夹"""
    # 设置压缩路径
    if arc_path is None:
        arc_path = rf'{os.path.basename(file)}'
    # 先压缩本文件
    zf.write(file, arc_path)
    # 如果是文件夹
    if os.path.isdir(file):
        
        # 获取它所有的子文件
        inner_files = os.listdir(file)
        
        # 将所有的子文件压缩
        for inner_file in inner_files:
            inner_file = f'{file}{os.sep}{inner_file}'
            arc = fr'{arc_path}{os.path.basename(inner_file)}'
            writeZip(zf, inner_file, arc)
# 文件路径
zip_file_path = r'D:test.zip'  # 压缩包路径
file_path = r'D:10-中日欧美信息解析'  # 被压缩文件
# 默认使用ZIP_STORED
zf = zipfile.ZipFile(zip_file_path, 'w')
# 写入文件(自定义一个函数,迭代压缩文件夹)
writeZip(zf, file_path)
# 关闭文件
zf.close()

现在可以看到,虽然所有文件都写入了压缩包,但是该方法并没有压缩文件。

改用压缩文件的方法。

图片[2]-python常用标准库(压缩包模块zipfile和tarfile)-唐朝资源网

import os
import zipfile
def writeZip(zf, file, arc_path=None):
    """迭代压缩文件夹"""
    # 设置压缩路径
    if arc_path is None:
        arc_path = rf'{os.path.basename(file)}'
    # 先压缩本文件
    zf.write(file, arc_path)
    # 如果是文件夹
    if os.path.isdir(file):
        # 获取它所有的子文件
        inner_files = os.listdir(file)
        # 将所有的子文件压缩
        for inner_file in inner_files:
            inner_file = f'{file}{os.sep}{inner_file}'
            arc = fr'{arc_path}{os.path.basename(inner_file)}'
            writeZip(zf, inner_file, arc)
# 文件路径
zip_file_path = r'D:test.zip'  # 压缩包路径
file_path = r'D:10-中日欧美信息解析'  # 被压缩文件
# 使用ZIP_DEFLATED压缩
zf = zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED)
# 写入文件(自定义一个函数,迭代压缩文件夹)
writeZip(zf, file_path)
# 关闭文件
zf.close()

可以看到文件是内部压缩写入的。

解压

有两种解压方法。注意:解压是读取文件,操作模式要改为r。

方法说明

解压缩单个指定文件。

解压所有文件。

语法:(, path=None, pwd=None)

图片[3]-python常用标准库(压缩包模块zipfile和tarfile)-唐朝资源网

语法:(指定文件(压缩包中的路径)、解压位置(默认为当前工作目录)、指定密码(部分压缩包有密码,格式为字节流))

语法:(path=None, pwd=None)

语法:(解压位置,密码)

注意:解压后的文件和路径中同名的文件夹会报错,因为文件无法重置文件夹。

–迭代返回压缩包中的文件

import zipfile
with zipfile.ZipFile(r'D:test.zip') as zf:
    res = zf.namelist()
    print(res)
    # ['10-中日欧美信息解析/', '10-中日欧美信息解析/1-代码/', ...]

–迭代返回压缩包中的文件信息

如文件权限等

–查看压缩包中文件的信息

查看压缩包中的文件信息,如文件大小、创建日期等,默认查看所有文件。

语法:(文件=无)

tar包和gz、bz的使用2、xz格式

更类似于文件操作,只是压缩方式略有不同。

用过Linux系统的人都知道tar是Linux的一种打包方式。打包成tar包后,可以使用其他压缩程序进行压缩。最常用的压缩方式是gzip,压缩率最高的是bzip2,还支持另一种比较小的xzip格式。

主要的操作方法是..open(),可以直接.open()。

语法:open(name, mode=’r’)

我在学习的时候,老师也教过=’UTF-8’这个参数,但是文件操作需要什么编码格式呢?感觉他是为了方便直接从文件操作的代码里复制过来的,然后没有删掉。

操作tar包

模式主要是r、w、a、x,加上add方法用来写文件,还是用close方法退出。

添加(名称,)

add(压缩文件,压缩别名)

注意压缩后的别名不能以路径分隔符结尾,否则只能创建文件夹。

import tarfile
with tarfile.open('test.tar', 'w') as tf:
    tf.add('test.txt')

压缩

压缩的方式主要是改变模式,在rwx的基础上添加各种压缩方式,变成:r:gz、w:bz2、x:xz等样式,然后压缩tar刚刚创建的包,当然你也可以直接把文件压缩成压缩包。

注意a模式不能配备任何压缩模式,因为gzip、bzip2、xzip不能直接追加文件,所以如果要追加文件,解压tar包,然后追加压缩.

import tarfile
# tar包以gzip格式压缩
with tarfile.open('test.tar.gz', 'w:gz') as tf:
    tf.add('test.tar')

解压

解压方式与.

方法含义

解压指定文件

解压所有文件

–返回压缩包中的文件(列表)删除压缩包中的文件

并且不支持删除压缩包中的文件,所以如果需要删除压缩包中的文件,可以将压缩包中的文件解压,删除里面的文件,然后重新压缩。

© 版权声明
THE END
喜欢就支持一下吧
点赞212赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容