日常工作辅组:zipfile用法总结

最近陆续把日常工作中每天重复的劳动,比如比对,校验,简单的工作,都实现了一键化,为此省却了不少时间

此为磨刀不误砍柴工

越来越懒,不解释,直接上代码

# coding:utf-8
import zipfile
import os
import shutil
import pdb


def create_zip(src, dst,flag=True):
    """
    对指定文件下的文件或子文件夹进行压缩(空目录也会被压缩)
    :param src: 被压缩的文件夹或者文件
    :param dst: 压缩文件保存路径+xxxx.zip
    :param flag: True,打包时带上目录,False,打包时不带上当前目录
    :return: 无
    """
    zip = zipfile.ZipFile(dst, "w", zipfile.ZIP_DEFLATED)
    if os.path.isdir(src):  # 如果src是一个目录
        if flag:#True,打包时带上目录
            src_dir = os.path.split(src)[-1]
        else:#False,打包时不带上当前目录
            src_dir = ''
        for root, dirs, fileNames in os.walk(src):
            # zip中的路径是相对路径
            relative_path = root.replace(src, '')
            zip_path = src_dir + relative_path
            for fileName in fileNames:
                root_with_filename = os.path.join(root, fileName)
                child_path_with_filename = os.path.join(zip_path, fileName)
                zip.write(root_with_filename, child_path_with_filename)
            for dir in dirs:#如果目录下没有文件也要把目录也压缩进去
                abs_path = os.path.join(root,dir)
                zip_path = os.path.join(src_dir,dir)
                zip.write(abs_path,zip_path)

    if os.path.isfile(src):  # 如果src是一个文件
        fileName = os.path.split(src)[-1]
        zip.write(src, fileName)
        zip.setpassword('123') #设置加密
    zip.close()

def read_zip(dst):
    """
    读取zip包中每个文件的内容
    :param dst: zip文件
    :return: 无
    """
    if zipfile.is_zipfile(dst):
        num = 0
        with zipfile.ZipFile(dst,mode='r') as z:
            for file in z.namelist():
                print(file,os.path.isfile(file))
                if os.path.isfile(file):
                    num += 1
                    with z.open(file) as fp:
                        print(fp.read())
        if num == 0:
            print('zip中文件为空')
    else:
        print('这不是zip文件')

def add_zip(dst,zip_path, file):
    """
    向已存在的zip包中指定目录添加文件
    :param dst: zip文件
    :param zip_path: zip中路径,如果zip_path不存在,则会自动创建对应的目录
    :param file: 要添加的文件
    :return: 无
    """
    if zipfile.is_zipfile(dst):
        zip = zipfile.ZipFile(dst, "a", zipfile.ZIP_DEFLATED)
        fileName = os.path.split(file)[-1]
        dist = os.path.join(zip_path, fileName)
        if dist.replace('\\','/') in zip.namelist():
            print('存在同名文件')
        else:
            zip.write(file, dist)
            zip.close()
    else:
        print('这不是zip文件')

def del_zip(dst,fileName):
    """
    删除zip中指定的文件
    :param dst: zip文件
    :param fileName: 要删除的文件夹名,不带目录
    :return: 无
    """
    if zipfile.is_zipfile(dst):
        zip_old = zipfile.ZipFile(dst, "r", zipfile.ZIP_DEFLATED)
        old_zip_name = os.path.split(dst)[-1]
        new_dst = os.path.split(dst)[0]+r'\new_'+old_zip_name
        zip_new = zipfile.ZipFile(new_dst, "a", zipfile.ZIP_DEFLATED)
        name = zip_old.namelist()[:]
        for name in list(set(name)):
            sname = os.path.split(name)[-1]
            if fileName != sname:
                buffer = zip_old.read(name)
                zip_new.writestr(name,buffer)
        zip_new.close()
        zip_old.close()

        shutil.move(new_dst,dst)

    else:
        print('这不是zip文件')


def extract_zip(dst,to_path=None,password=None):
    """
    解压文件到指定目录
    :param dst: zip文件
    :param to_path: 要解压的目录
    :param password: 解压密码
    :return: 无
    """
    with zipfile.ZipFile(dst) as z:
        z.extractall(path=to_path,pwd=password.encode('utf8'))
    pass

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值