如何用python压缩文件

57 阅读1分钟

自从决定每周开始写技术文章以来,自己确实有一些变化,今天比较晚了,就写一个python的小功能吧,用Python来实现压缩功能。

用zipfile实现

ZipFile是Python中用于读取和创建ZIP文件的第三方库。它提供了一个接口来处理ZIP格式的归档文件,包括创建、读取、写入、添加和列出ZIP文件中的文件。

import os
import zipfile
 
def my_zip_function(zip_file_name, zip_file_list=[], zip_dir_list=[]):
    with zipfile.ZipFile(zip_file_name, "w") as zip_obj:
        # 压缩文件
        for tmp_file in zip_file_list:
            zip_obj.write(tmp_file, arcname=os.path.basename(tmp_file))
        # 压缩目录
        for tmp_dir in zip_dir_list:
            # zipfile没有直接压缩目录的功能,要压缩目录只能遍历目录一个一个文件压。
            for root, dirs, files in os.walk(tmp_dir):
                # 如果想要目录为空时仍将该目录压缩进去,该目录也要压缩一遍;反之请将以下行注释掉
                zip_obj.write(root)
                for tmp_file in files:
                    # 拼接文件完整目录,不然只用文件名代码找不到文件
                    tmp_file_path = os.path.join(root, tmp_file)
                    zip_obj.write(tmp_file_path, arcname=tmp_file)

备注:

  • 加arcname是为了防止压缩之后的文件存在多重目录
  • zipfile只能根据文件进行压缩,如果需要压缩目录中的所有文件,需要对目录进行遍历

更直观的方式

发挥Python胶水语言的特性,如果这个文件压缩的脚本是在Linux上的,那么只要用python调上一层shell命令就好了,大道至简,只用两行代码,也可以实现用zip压缩的功能,直接上代码。

import os
os.system(f'zip {output}.zip {input}')

以上命令如果返回找不到zip包,则需要在系统上先安装zip包。

yum install -y zip

除此之外,linux系统还提供了诸如gzip、tar等其他压缩方式,同样地,只要用python封装一下就可以了。