自从决定每周开始写技术文章以来,自己确实有一些变化,今天比较晚了,就写一个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封装一下就可以了。