目录

1 使用python压缩,解压缩

1.1 tarfile

1.1.1 使用tarfile对文件压缩

 1.1.2 使用 tatrfile对文件解压

 1.1.3 读写tar文档

1.2 zip

1.2.1 读取ZIP文件信息

1.2.2  从 ZIP 文件中解压缩

1.2.3 创建和添加到 ZIP 文件


        python自带的tarfile文件,可以方便读取tar归档文件,还可以使用gzip和bz2压缩归档文件为tar.gz和tar.bz2;

1 使用python压缩,解压缩

        python可以解压缩五种文件:.gz, .tar, .tgz, .zip, .rar

解释:

        gz: 即gzip,通常只能压缩一个文件,与tar结合可以实现先打包,再压缩;

        tar: linux下的打包工具,只打包,不压缩;

        tgz: 即tar.gz, 先使用tar打包,再使用gz压缩得到的文件;

        zip: 不同与gzip,可以打包压缩多个文件,不过分别压缩文件,压缩率低于tar;

        rar: 打包压缩文件, 最初用于DOS, 基于windows操作系统,压缩率比 zip高,但速度慢,随机访问速度也慢;

1.1 tarfile

1.1.1 使用tarfile对文件压缩

        tarfilepython自带的包

>>> import tarfile
>>> tar = tarfile.open('/Users/qiaoboyu/Desktop/alldata.tar.gz',"w:gz")
>>> import os
>>> for root, dir, files in os.walk('/Users/qiaoboyu/Desktop/alldata'):
...     for file in files:
...             fullpath = os.path.join(root, file)  # 拼接路径
...             tar.add(fullpath)  # 添加压缩文件

        压缩后文件截图:

python 解压缩zip python压缩解压_开发语言

 1.1.2 使用 tatrfile对文件解压

>>> tar_path = '/Users/qiaoboyu/Desktop/alldata.tar.gz'

>>> target_path = '/Users/qiaoboyu/Desktop/data1'
>>> tar = tarfile.open(tar_path,"r:gz")
>>> file_names = tar.getnames()
>>> for file_name in file_names:
...     tar.extract(file_name,target_path)
... 
>>> tar.close()

解压后文件截图:

python 解压缩zip python压缩解压_开发语言_02

 或者:

>>> dataset_folder_path = '/Users/qiaoboyu/Desktop/data2'
>>> with tarfile.open('/Users/qiaoboyu/Desktop/alldata.tar.gz') as tar:
...      tar.extractall(dataset_folder_path)
...      tar.close()

解压后截图:

python 解压缩zip python压缩解压_压缩文件_03

 1.1.3 读写tar文档

代码:

import tarfile

# 获取tar文件里面所有的文件名
with tarfile.open('tarDir.tar', 'r') as t:
    print(t.getnames())

# 获取tar文件里面所有的文件名、大小、模式等
import tarfile
import time

with tarfile.open('tarDir.tar', 'r') as t:
    for member_info in t.getmembers():
        print(member_info.name)
        print('修改时间:', time.ctime(member_info.mtime))
        print('模式:', member_info.mode)
        print('类型:', member_info.type)
        print('大小:', member_info.size, 'bytes')

1.2 zip

1.2.1 读取ZIP文件信息

        要读取ZIP文件的内容,首先必须创建一个ZipFile对象(代码中的zfile.zip)。ZipFile对象在概念上与File对象相似;

       要创建一个 ZipFile 对象,就调用 zipfile.ZipFile()函数,向它传入一个字符串,表示.zip 文件的文件名;

        zipfile 是 Python 模块的名称,ZipFile()是函数的名称

        ZipFile 对象表示 整个归档文件,而 ZipInfo 对象则保存该归档文件中每个文件的有用信息;

import zipfile

# 传入压缩文件zfile.zip获取相关信息
zip_file = zipfile.ZipFile('zfile.zip')

# 获取压缩文件中的内容 ZipFile 对象有一个 namelist()方法,返回 ZIP 文件中包含的所有文件和文件夹 的字符串的列表
f_content = zip_file.namelist()

# 压缩前的大小 这些字符串可以传递给 ZipFile 对象的 getinfo()方法,返回一个关于特定文件的 ZipInfo 对象
# ZipInfo 对象有自己的属性,诸如表示字节数的 file_size 和 compress_size,它们分别表示原来文件大小和压缩后文件大小
f_size = zip_file.getinfo('zfile/a.txt').file_size

# 压缩后的大小
c_size = zip_file.getinfo('zfile/a.txt').compress_size

1.2.2  从 ZIP 文件中解压缩

        ZipFile 对象的 extractall()方法从 ZIP 文件中解压缩所有文件和文件夹,放到当前工作目录中;

import zipfile

zip_file = zipfile.ZipFile('zfile.zip')
# 解压 可以向 extractall()传递的一个文件夹名称,它将文件解压缩到那个文件夹,而不是当前工作 目录
# 如果传递给 extractall()方法的文件夹不存在,它会被创建
zip_extract = zip_file.extractall()
zip_extract.close()

1.2.3 创建和添加到 ZIP 文件

        创建自己的压缩 ZIP 文件,必须以“写模式”打开 ZipFile 对象,即传入'w' 作为第二个参数(这类似于向 open()函数传入'w',以写模式打开一个文本文件)

        向 ZipFile 对象的 write()方法传入一个路径,Python 就会压缩该路径所指的文件;