首页 > 其他分享 >文件夹内图片zip压缩

文件夹内图片zip压缩

时间:2022-12-07 19:22:29浏览次数:37  
标签:name zip 压缩 phone 文件夹 file path os image

功能:

把文件夹内的图片文件进行重命名,并压缩成一个zip文件,如果文件数过多会自动分开压缩处理

 

生成文件格式如下图:

 

import os
import random
import shutil
import zipfile
from openpyxl import Workbook

image_path = r'F:\新建文件夹\Images'
dir_name = '照片模板'
faceNums = 0

# 第一步获取目录图片文件名
def getImagesFilename(filepath):
    global faceNums
    '''
        函数功能:获取某目录下所有图片文件名
    '''

    flists = []
    if not os.path.isdir(filepath):
        print(f'{filepath}不是目录')
        return
    dirs = os.listdir(filepath)
    for file in dirs:
        if file.endswith('.jpg') or file.endswith('png') or file.endswith('bmp'):
            faceNums += 1
            flists.append(file)
    return flists


def createModelDir():
    d = os.path.join(os.path.dirname(image_path), dir_name)
    if os.path.exists(d):
        shutil.rmtree(d)
    os.mkdir(d)

def createPhone():
    phone = ''
    num1 = random.choice(['123', '124', '125', '126', '127', '128', '129', '130'])
    phone += str(num1)
    for i in range(0,8):
        num = random.randint(0,9)
        phone += str(num)
    return phone

def createDatas(filename):
    phonelist = []
    for file in filename:
        phone = createPhone()
        while phone in phonelist:
            phone = createPhone()
        phonelist.append(phone)
        filename, extentsion = os.path.splitext(file)
        src = os.path.join(image_path, file)
        dst = os.path.join(os.path.dirname(image_path),dir_name, phone + extentsion)
        shutil.copyfile(src, dst)

def autoZip():
    d1 = os.path.join(os.path.dirname(image_path), dir_name)

    for dirpath, dirnames, filenames in os.walk(d1):
        print(len(filenames))

    target = 3000
    zlist = []
    for i in range((int(len(filenames)) // target) + 1):
        d = os.path.join(os.path.dirname(image_path), dir_name + '_' + str(i) + '.zip')
        z = zipfile.ZipFile(d, 'w', zipfile.ZIP_DEFLATED)
        zlist.append(z)

    num = 0
    for dirpath, dirnames, filenames in os.walk(d1):
        for filename in filenames:
            absname = os.path.join(dirpath, filename)
            arcname = absname[len(os.path.abspath(d1)) + 1:]
            # 加参数arcname,压缩不带目录层级
            zpos = (num // target) + 1
            zlist[zpos-1].write(absname, arcname)
            num += 1
    for j in zlist:
        j.close()


def writeXlsx():
    wb = Workbook()
    ws = wb.active
    d1 = os.path.join(os.path.dirname(image_path), dir_name)
    dirs = os.listdir(d1)
    name = 2500
    data = []
    data.append(['姓名', '性别', '身份', '手机号', '证件类型', '证件号', '门禁卡id(少于20位数字)', '学历', '政治面貌', '紧急联系人', '紧急联系人号码', '是否为本地户籍',
                 '帮扶类型', '楼栋', '单元', '门牌号'])
    for file in dirs:
        name = name + 1
        sex = '女'
        role = '其他'
        filename, extentsion = os.path.splitext(file)
        position_lou = '6号楼'
        position_unit = '1单元'
        postion_door = '605'
        person = [name, sex, role, filename, '', '', '', '', '', '', '', '', '', position_lou, position_unit, postion_door]
        data.append(person)
    for row in range(5, len(data)+5):
        for col in range(1, 17):
            ws.cell(row, col, data[row-5][col-1])
    wb.save(os.path.join(os.path.dirname(image_path), dir_name + '.xlsx'))


if __name__ == '__main__':
    r = getImagesFilename(image_path)
    createModelDir()
    createDatas(r)
    autoZip()
    writeXlsx()
    print(f'图片总数:{faceNums}')

 

标签:name,zip,压缩,phone,文件夹,file,path,os,image
From: https://www.cnblogs.com/xiaojiaocx/p/16964280.html

相关文章

  • linux 中gz文件的压缩、解压保留源文件
     001、压缩保留源文件[root@PC1test]#lsa.txt[root@PC1test]#gzip-ca.txt>a.txt.gz##压缩并保留源文件[root@PC1test]#lsa.txta.txt.gz......
  • roaming文件夹的作用
    roaming文件夹是用于存放一些程序运行后产生的数据文件的;该文件夹是Windows存放一些使用程序后产生的数据文件,如软件听音乐,登入的号码等而缓存的一些数据,若删除该文件夹不......
  • Linux文件夹执行权限不够怎么办?如何处理?
    在Linux中,文件夹的执行权限不够是非常普遍的情况,那么遇到这种情况该如何处理呢?我们可以通过修改权限来解决该问题,其中比较常用的命令是chmod,接下来我们来看看详细的内......
  • tar.gz打包压缩文件
    功能:把某文件夹内的图片,视频打包压缩成.tar.gz文件,并把文件随机重命名,生成对应的json文件运行效果如下图:    """功能:把文件夹内的所有文件打包压缩"......
  • Linux中查看各文件夹大小命令:du -h --max-depth=1
    du[-abcDhHklmsSx][-L<符号连接>][-X<文件>][--block-size][--exclude=<目录或文件>][--max-depth=<目录层数>][--help][--version][目录或文件]常用参数:-a或-all......
  • linux中常用的压缩文件指令
    记录linux下常用的压缩文件解压指令持续更新......1.tar指令Examples:tar-cfarchive.tarfoobar(对文件foo和bar压缩,创建archive.tar压缩包)tar-tvf......
  • zlib 压缩解压缩库函数
    1.下载地址http://www.zlib.net/2.使用方法zpipe里面有个例程,示范了压缩和解压缩的功能 3.  例程讲解主要有2个函数,压缩函数例程 和解压缩函数例程......
  • Redis原理 - 对象的数据结构(SDS、Inset、Dict、ZipList、QuickList、SkipList、RedisO
    Redis数据结构1.SDSRedis是用C语言写的,但是对于Redis的字符串,却不是C语言中的字符串(即以空字符’\0’结尾的字符数组),它是自己构建了一种名为简单动态字符串(sim......
  • Linux下的压缩解压缩命令详解
    1.zip-rmyfile.zip./*将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件.2.unzipunzip-o-d/home/sunnymyfile.zip......
  • 重命名文件夹下的所有子文件夹名,重命名子文件夹下的所有子文件夹名
    1、想要重命名文件夹下的所有子文件夹的名称,所有的子文件夹的名称都加上文件夹的名称前缀代码如下:#!/bin/bashmkdir../newtestls-1>../newtest/dirName.txtbName=$(base......