广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python如何拆分ZIP文件
  • 432
分享到

Python如何拆分ZIP文件

2024-04-02 19:04:59 432人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录python拆分ZIP文件文件样子如下Python ZIP 装包 拆包装包拆包Python拆分ZIP文件 同事接到个任务,每周拆分下发zip文件。 文件样子如下 目录下有很多文

Python拆分ZIP文件

同事接到个任务,每周拆分下发zip文件。

文件样子如下

目录下有很多文件,要按网点下发。这个总不能每次都手工做吧。 python 脚本搞起!

需要 2个库

import os
import zipfile

先解压到临时目录,再遍历压缩成新zip文件。注意中文字符问题。

上代码

# encoding: utf-8
"""
@author: 陈年椰子
@contact: hndm@qq.com
@version: 1.0
@project:MyTools 
@file: zip_work.py
@time: 2021-9-13 15:48
说明
"""
import os
import zipfile
 
 
def dfs_get_zip_file(input_path,result):
    # 遍历目录列表
    files = os.listdir(input_path)
    for file in files:
        if os.path.isdir(input_path+'/'+file):
            dfs_get_zip_file(input_path+'/'+file,result)
        else:
            result.append(input_path+'/'+file)
 
def zip_path(input_path,output_path,output_name,up_path=""):
    # input_path 要压缩的目录
    # output_path zip文件存放目录
    # output_name zip文件名
    # up_path zip包需要剔除的父目录,避免压缩包内目录过深
    f = zipfile.ZipFile(output_path+'/'+output_name,'w',zipfile.ZIP_DEFLATED)
    filelists = []
    dfs_get_zip_file(input_path,filelists)
    for file in filelists:
        f.write(file,file.replace(up_path,''))
    f.close()
    return output_path+r"/"+output_name
 
 
def get_cateGory_dir_zip(filepath, ext_dir, up_path = ""):
    #遍历filepath下所有文件,包括子目录 , 找到网点目录,压缩成zip文件
    # 按需要修改压缩逻辑 , 我这里是按网点机构分别压缩
    cate_dict = {'469030':'21',
                '469035':'23',
                '469031':'24',
                '469027':'19',
                '469003':'13',
                '469025':'17',
                '469007':'16',
                '460101':'11',
                '469033':'25',
                '469028':'26',
                '469034':'27',
                '469002':'14',
                '469036':'28',
                '460201':'12',
                '469026':'22',
                '469006':'20',
                '469005':'18',
                '469001':'15',
                }
    files = os.listdir(filepath)
    if os.path.isdir(ext_dir):
        pass
    else:
        os.mkdir(ext_dir)
    for fi in files:
        fi_d = os.path.join(filepath,fi)
        if os.path.isdir(fi_d):
            if fi.find("46")==0:
                zip_file_cnt = 0
                ctg_dir_list = os.listdir(filepath)
                for ci in ctg_dir_list:
                    ctg_dir = os.path.join(filepath, ci)
                    if os.path.isdir(ctg_dir):
                        zip_file = "{}.zip".fORMat(ci[:6])
                        zip_file_dir = os.path.join(ext_dir, zip_file)
 
                        if os.path.exists(zip_file_dir):  # 如果文件存在 删除文件
                            os.remove(zip_file_dir)
                        print('压缩', ctg_dir, zip_file_dir, ext_dir)
                        zip_path(ctg_dir, ext_dir, zip_file, up_path)
                        zip_file_cnt = zip_file_cnt + 1
                return zip_file_cnt
            else:
                return get_category_dir_zip(fi_d, ext_dir)
 
 
 
 
def sfp_unzip(file_path, ext_dir):
    """unzip zip file"""
    zip_file = zipfile.ZipFile(file_path)
    if os.path.isdir(ext_dir):
        pass
    else:
        os.mkdir(ext_dir)
    zip_i = 0
 
    for names in zip_file.namelist():
        zip_i = zip_i + 1
        # 避免中文出现乱码
        gbk_names = names.encode('cp437').decode('gbk')
        file_size = zip_file.getinfo(names).file_size
        new_path = os.path.join(ext_dir, gbk_names)
        # 判断文件是文件夹还是文件
        if file_size > 0:
            # 是文件,通过open创建文件,写入数据
            with open(file=new_path, mode='wb') as f:
                # zf.read 是读取压缩包里的文件内容
                f.write(zip_file.read(names))
        else:
            # 是文件夹,就创建
            os.mkdir(new_path)
    zip_file.close()
    return zip_i
 
if __name__=="__main__":
    # 解压文件
    file_cnt = sfp_unzip("zip/xyk.zip", "D:/zip/tmp")
    if file_cnt > 0:
        # 按网点压缩打包文件
        zip_file_cnt = get_category_dir_zip("D:/zip/tmp", "D:/zip/data")
        print("拆分建立{}个zip文件。".format(zip_file_cnt))
    else:
        print("zip文件为空,未拆分建立zip文件。")

Python ZIP 装包 拆包

装包

zip函数可以将两个列表“缝合起来”,比如:

a=[1,2,3]
b=['x','y','z']
c=list(zip(a,b))
print(c)

这里的含义是a里面的第一个元素跟b里面的第一个元素配对,放到一个元组里面;a里面的第二个元素跟b里面的第二个元素配对,放到另外一个元组里面;以此类推。

现在,另外在a里面增加一个元素,再使用zip的结果会怎么样呢?

a.append(4)
c=list(zip(a,b))
print(c)

从上面截图可以看出,列表是作为参数被传入zip函数中,而zip函数在遍历列表(或者其他的可迭代数据类型 Iterable data type)时,遍历到最短的那个列表后,遍历结束。

在上面a和b的例子中,b列表长度是3,a列表长度是4,所以最终产生的列表c的长度也只有3。

拆包

拆包是装包的方向操作

d=list(zip(*c))
print(d)

上述拆包的核心是在zip(*c)里面,这里不是太好理解。从结果来看,是产生了两个元组,d和e。其分别的内容和a及b这两个列表元素一样。

这里重点看下*c,不太好理解。其实可以打印出来:

print(*c)

从上图可以看出 *c是把c列表里面的三个参数分别拆了出来,然后作为参数传入了zip函数里面。可以做另一个试验验证一下。

p1=(1,'x')
p2=(2,'y')
p3=(3,'z')
p=list(zip(p1,p2,p3))
p==d

从上面的验证可以看出拆包时候的*c,其实就c列表里面三个作为元组的元素分别传入zip函数中。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Python如何拆分ZIP文件

本文链接: https://www.lsjlt.com/news/120865.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python如何拆分ZIP文件
    目录Python拆分ZIP文件文件样子如下Python ZIP 装包 拆包装包拆包Python拆分ZIP文件 同事接到个任务,每周拆分下发zip文件。 文件样子如下 目录下有很多文...
    99+
    2022-11-11
  • python怎么拆分文件路径
    使用python拆分文件路径的方法:1.新建python项目;2.导入os模块;3.定义文件路径;4.使用os.split()方法拆分文件名;5.使用os.splitext()方法拆分文件后缀;具体步骤如下:首先,打开python,并新建一...
    99+
    2022-10-20
  • Python如何实现破解zip文件
    小编给大家分享一下Python如何实现破解zip文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、思路爆密码的思路其实都大同小异:无非就是字典爆破,就看你是有...
    99+
    2023-06-14
  • 怎么在python中拆分与合并文件
    本篇文章给大家分享的是有关怎么在python中拆分与合并文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python是什么意思Python是一种跨平台的、具有解释性、编译性、...
    99+
    2023-06-15
  • 如何分析linux zip文件解压命令
    如何分析linux zip文件解压命令,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Linux命令千千万,就看你会不会用,Linux文件解压命令也有好几个,下面...
    99+
    2023-06-28
  • Python打包文件夹(zip/tar/
    Code tells all:一、zipimport os, zipfile #打包目录为zip文件(未压缩) def make_zip(source_dir, output_filename):     zipf = zipfile.Z...
    99+
    2023-01-31
    文件夹 Python tar
  • ​​​​​​​如何利用python破解zip加密文件
    目录前言:一、破解zip加密文件的思路二、实例代码演示0、zip的压缩方式1、解压zip文件2、实现密码字符的全排列三、密码是几位未知,也可以破解密码总结前言: 日常工作中,会遇到一...
    99+
    2022-11-11
  • Python实现文本文件拆分写入到多个文本文件的方法
    引言 将一个txt文本文件中的内容行拆分固定的行数,自动分批写入到多个文本文件。 比如:一个源txt文件有5100行数据,每1000行插入到一个txt文件,最后获得6个txt文件(5...
    99+
    2022-11-12
  • 使用Python怎么将一个文本文件拆分到多个文本文件
    使用Python怎么将一个文本文件拆分到多个文本文件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python可以做什么Python是一种编程语言,内置了许多有效的工具,Pyt...
    99+
    2023-06-14
  • Java如何解压zip文件
    小编给大家分享一下Java如何解压zip文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!代码如下:package com.lanyuan.assemb...
    99+
    2023-05-30
    java zip
  • ubuntu如何解压zip文件
    这篇文章主要讲解了“ubuntu如何解压zip文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ubuntu如何解压zip文件”吧! ubuntu解压zi...
    99+
    2022-12-30
    ubuntu zip文件
  • Python中怎么解压zip文件
    Python中怎么解压zip文件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。原始函数首先是下面这些模拟对 zip 文件中文件实际操作的普通函数:def&nbs...
    99+
    2023-06-17
  • Python压缩解压缩zip文件及破解zip文件密码的方法
    python 的 zipfile 提供了非常便捷的方法来压缩和解压 zip 文件。 例如,在py脚本所在目录中,有如下文件: readability/readability.js readability...
    99+
    2022-06-04
    文件 解压缩 密码
  • 将pdf文件拆分成多个文件的教程
    要将PDF文件拆分成多个文件,可以使用以下方法:1. 使用Adobe Acrobat软件:- 打开PDF文件。- 在右侧的“工具”栏...
    99+
    2023-09-16
    pdf
  • Python中怎么将Excel拆分为为多个CSV文件
    今天就跟大家聊聊有关Python中怎么将Excel拆分为为多个CSV文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、前言在日常生活或者工作中的时候,我们偶尔会遇到这样一种让人头...
    99+
    2023-06-15
  • Linux下如何解压zip文件
    本篇内容主要讲解“Linux下如何解压zip文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下如何解压zip文件”吧!通常情况下,Linux系统并不会产生zip文件,而是由用户把zi...
    99+
    2023-06-27
  • 如何使用Python实现zip文件密码破解
    小编给大家分享一下如何使用Python实现zip文件密码破解,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Python有一个内置模块zipfile可以干这个事情,测试一波,一个测试文件,设置解压密码为123。import&...
    99+
    2023-06-15
  • python怎么读取zip包内文件
    可以使用`zipfile`模块来读取zip包内的文件。下面是一个使用示例: import zipfile # 打开zip包 wit...
    99+
    2023-10-27
    python
  • Python破解ZIP或RAR文件密码
    基本原理在于Python标准库zipfile和扩展库unrar提供的解压缩方法extractall()可以指定密码,这样的话首先(手动或用程序)生成一个字典,然后依次尝试其中的密码,如果能够正常解压缩则表示密码正确。import osim...
    99+
    2023-01-31
    密码 文件 Python
  • Java如何合并、拆分PDF文档
    这篇文章主要介绍Java如何合并、拆分PDF文档,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用工具:Free Spire.PDF for Java (免费版)Jar文件获取及导入:方法1:通过官网下载包。下载后,...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作