工作上遇到一个问题,QA提供的1000多个压缩文件名称命名不规范,服务器做C++覆盖率产物解析,压缩文件文件名必须和解压之后的文件名一致,所以只是修改压缩文件名称行不通,必须逐个解压之后重命名文件夹,再打包成压缩文件,用Python脚本实现了下,有需要自取做下改造。

这边实现的需求是批量把文件名类似“test_P0_500_1085____1.zip”的压缩文件先解压,之后重命名成:test_main_文件名之后再重新压缩成压缩文件。

一、实现过程中遇到的几个坑

1. Python文件重命名和删除

重命名文件夹使用shutil.move()方法,删除文件夹用shutil.rmtree()方法,删除单个文件用os.remove()方法。

2. Python文件压缩类型设置

在使用zipfile.ZipFile()方法的时候,如果没有加compression参数,文件只是添加到压缩文件中,实际上并没有进行压缩操作,会维持源文件的大小。

3. Python文件压缩目录配置

使用z.write()方法压缩文件,没有传第二个参数会把压缩文件所在的根目录完整路径层级一并压缩到压缩文件中;

不能只传fileName,这样压缩出来的文件在解压之后不会有文件夹目录。最好加上压缩文件夹名称,这样在Unbuntu环境下用命令解压之后会解压到压缩前所在的folder文件夹,而不会把压缩包里面的文件都解压到当前路径中。

实现脚本源码如下:

# -*- coding: utf-8 -*-

import os

import zipfile

import shutil

"""

批量重命名压缩文件,sourceFolder为源压缩文件所在文件夹,destFolder为解压重命名再压缩之后的目标文件夹

"""

def batchRenameZip(sourceFolder, destFolder):

source = os.walk(sourceFolder, "r")

index = 1

for path,dir_list,file_list in source:

for fileName in file_list:

if fileName.find(".zip") < 0 or fileName.find("___") < 0:

continue

sourceZipPath = os.path.join(path, fileName)

index+=1

print(sourceZipPath)

try:

zFile = zipfile.ZipFile(sourceZipPath, "r")

for member in zFile.namelist():

zFile.extract(member, destFolder)

zFile.close();

folderName = fileName[0:fileName.find("___")]

renameFolder = "test_main_" + str(index)

#重命名文件夹

shutil.move(destFolder + folderName, destFolder + renameFolder)

#压缩重命名之后的文件夹

compressFile(destFolder + renameFolder + ".zip", destFolder + renameFolder, renameFolder)

#删除解压之后的文件夹,保留压缩文件,删除文件夹用shutil.rmtree()方法

shutil.rmtree(destFolder + renameFolder)

#看自己的需要,是否要删除源压缩文件,删除单个文件用os.remove()方法

#os.remove(sourceZipPath)

except Exception as err:

"""

异常捕获处理,避免源压缩文件本身已损坏的问题

如果源压缩文件有问题会输出"File is not a zip file"

"""

print err

# zipPath是压缩之后的文件路径,compressFolder是要压缩的文件夹路径,folder是压缩之后所在文件夹名称

def compressFile(zipPath, compressFolder, folder):

if os.path.isfile(compressFolder):

with zipfile.ZipFile(zipPath, 'w', compression=zipfile.ZIP_DEFLATED) as z:

z.write(compressFolder)

else:

# 这边如果没有传compression参数,则文件只是打包到压缩文件里面,并没有进行压缩

with zipfile.ZipFile(zipPath, 'w', compression=zipfile.ZIP_DEFLATED) as z:

for root, dirs, files in os.walk(compressFolder):

for fileName in files:

if fileName != zipPath:

filePath = os.path.join(root, fileName)

z.write(filePath, folder + "/" + fileName)

if __name__ == '__main__':

batchRenameZip("/Users/chenwenguan/Downloads/testRename/", "/Users/chenwenguan/Downloads/testRenameSecond/")

二、其他参考资料

扩展阅读:

转载请注明出处:陈文管的博客–  Python批量重命名压缩文件

扫码或搜索: 文呓

微信公众号  扫一扫关注

python 解压文件 重名_Python批量重命名压缩文件相关推荐

  1. python解压版怎么安装_python 解压版 zip file 安装

    python 解压版 zip file 安装 Python Releases for Windows 找到最新稳定版本的 "Download Windows x86-64 embeddabl ...

  2. python解压7z文件_Python调用7zip命令实现文件批量解压

    Python调用7zip命令实现文件批量解压 1.输入压缩文件所在的路径 2.可以在代码中修改解压到的文件路径和所需要解压的类型,列入,解压文件夹下面所有的mp4格式的文件 3.cmd 指的就是Pyt ...

  3. python解压zip文件_python-29 python解压压缩包的几种方法

    这里讨论使用Python解压例如以下五种压缩文件: .gz .tar .tgz .zip .rar 简单介绍 gz: 即gzip.通常仅仅能压缩一个文件.与tar结合起来就能够实现先打包,再压缩. t ...

  4. Python 解压rar类型文件

    Python 解压rar类型文件 一.前提准备 1. pip install rarfile 2. 在官网下载 WinRAR安装包 ,安装完毕后在安装目录即可找到一个名为 "UnRAR.ex ...

  5. Python 解压文件的几种方法

    gz: 即gzip.通常仅仅能压缩一个文件.与tar结合起来就能够实现先打包,再压缩. tar: linux系统下的打包工具.仅仅打包.不压缩 tgz:即tar.gz.先用tar打包,然后再用gz压缩 ...

  6. 用Python解压tgz文件

    用Python解压tgz文件 本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 Unported许可协议进行许可.允许非商业转载,但应注明作者及出处. 作者:xialulee 最初发布于:2 ...

  7. Python解压7z压缩文件

    Python解压7z压缩文件 可以使用py7zr库: import py7zrarchive = py7zr.SevenZipFile(r'xxx.7z', mode='r')archive.extr ...

  8. Python解压zip文件出现TypeError: pwd: expected bytes, got str的解决方案

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  9. python解压rar_Python解压 rar、zip、tar文件的方法

    Q1 :如何解压 rar 压缩包文件? A : Step1:检查是否有 rarfile 第三方库,若没有该模块,则需要进行安装 : Step2:参考代码如下: import rarfile impor ...

  10. Windows下使用python解压tgz文件

    浅记以备自用 有时候下载的数据集压缩包可能是tgz格式,在windows下使用常规的解压缩软件无法解压,可以使用python解压tgz文件. Step1.载入模块 import tarfile Ste ...

最新文章

  1. mysql2013年8月怎么打出来_2020年8月31日,上周完成了一个查询接口来检查mysql的数据,速度很慢,20200831,从,MySQL,中查,贼...
  2. 编程马拉松大赛试题及代码(C++实现)
  3. MAT之PSO:利用PSO实现对一元函数y = sin(10*pi*x) ./ x进行求解优化,找到最优个体适应度
  4. 【阿里云课程】深度生成模型基础,自编码器与变分自编码器
  5. ITK:处理点和单元数据
  6. 大数据WEB阶段Spring框架(三)声明式事务处理
  7. 舰娘 服务器 维护时间,《舰娘Collection》停止运营公告
  8. 部署在Netweaver应用上的Fiori缓存的调试
  9. 数据轮播图翻页封装(左右点击)
  10. 【HTTP 2】简介(Introduction)
  11. 基于ASP.NET Core SignalR的流式传输
  12. 7-17 爬动的蠕虫 (15 分)
  13. codevs 1052:地鼠游戏
  14. Python正则表达式指南上半部
  15. 青龙面板出现需要409000秒才能登陆,加忘记密码
  16. mysql stop salve_MySQL主从切换
  17. MS SQL开发经典
  18. HashMap深度解析
  19. VS2012下基于Glut OpenGL glEdgeFlag示例程序:
  20. 计算机视觉︱图像取证技术

热门文章

  1. 软文写作技巧与营销的相互作用
  2. oc项目中使用swift
  3. 计算机辅助教学应用于哪些方面,计算机辅助教学在英语教学中的运用
  4. 尚学堂视频笔记四:常用类
  5. JavaScript学习笔记(25) JavaScript.then()这个方法是什么意思?
  6. 元宇宙、区块链和潘家园
  7. shell脚本练习题(编程题)。
  8. Qt5.9.6 vs2015 SQlite 数据库增删改查
  9. android模拟器 菜单键,夜神安卓模拟器系统设置有哪些?
  10. Python 十进制转换二进制