用python压缩文件,python 压缩文件夹
本文主要介绍使用Python批量解压和压缩文件夹的示例代码。文中详细解释了实现步骤。感兴趣的朋友可以和边肖一起尝试一下。
00-1010一、python批量解压二。python批量压缩
目录
提示:如果是重要数据,请在解压前备份,解压后会覆盖原压缩文件!
解压前:
解压后:的文件名是英文的:
文件名包含中文:
代码如下
导入操作系统
导入技能
导入zip文件
#首先介绍所需的工具包。
# shutil是以后移动文件所必需的,因此您可以忽略此项。
#在此更改路径!
#parent_path=r 输入路径,该路径下的所有zip文件都将被解压缩
parent _ path=r e : \ py \ python 3.7 \ test \ test 99 \ zip
#文件类型选择
#可以自己更改压缩文件类型,需要引入其他工具包,比如tarfile。
#这是因为zip在你自己的windows上很常见。其他类型请自己改。
File_flag=。zip #修改要解压缩的格式,例如:压缩包
#删除解压缩后的zip文件
#不建议第一次使用。确认程序正确后再添加即可。
def del_old_zip(文件路径):
os.remove(文件路径)
#解压
def解压缩(文件路径,根目录):
#开始
# zipfile打开zip文件
z=zipfile。zip file(f“{ file _ path }”,“r”)
#解压
z . extract all(path=f“{ root }”)# path是解压路径,解包后位于此路径下。
#确定是否需要反复拆包。
对于z.namelist():中的名称
if names . ends with(file _ flag):
关闭()
返回1
#结束
关闭()
返回0
#因为我发现有些邮编在使用过程中拆包后会搞混。
#平时手动解压时,也可能会遇到是否覆盖提示的问题。
#以下两个函数解决了这个问题
#首先创建一个与压缩包同名的大文件夹。
#避免以后的混乱和麻烦
def start_dir_make(根,目录名):
os.chdir(根)
os.mkdir(目录名)
返回os.path.join(根目录,目录名)
#删除多余的文件夹
def rem_dir_extra(根,父目录名):
#递归要注意信息的正常处理。可能上一次调用改变了什么,下一次调用还是用以前的数据。
尝试:
#开始判断文件夹名称重复。
对于os.listdir(os.path.join(root,father_dir_name)):中的项目
#第一步是确定它是否是一个文件夹,如果不是,跳过这个循环。
如果不是OS . path . isdir(OS . path . join(root,father_dir_name,item)):
继续
#确定是否脱层目录结构。
#文件夹名称应该相同,子目录中只有一个文件夹。
如果item==father_dir_name和len(
os.listdir(os.path.join(root,father_dir_name)))==1:
#更改工作目录
os.chdir(根)
#重命名无用文件夹,因为直接移动会出现重名错误。
os.rename(父目录名,父目录名
+ -old)
# 移动文件后删除空文件夹
shutil.move(os.path.join(root, father_dir_name + -old, item), os.path.join(root))
os.rmdir(os.path.join(root, father_dir_name + -old))
# 将去掉一层目录结构后的文件夹继续作为父本递归处理下去
# 这里要注意,上面已经发生过数据的改动,所以下面递归传参一定要正确!
rem_dir_extra(root, item)
else:
# 处理那些不满足上面条件的文件夹
rem_dir_extra(os.path.join(root, father_dir_name), item)
except Exception as e:
# 打印错误信息
print("清除文件夹出错" + str(e))
# 入口
if __name__ == __main__:
flag = 1
while flag:
# 循环遍历文件夹
for root, dirs, files in os.walk(parent_path):
# 读取文件名
for name in files:
if name.endswith(file_flag):
# 创建文件夹
new_ws = start_dir_make(root, name.replace(file_flag, ))
# zip文件地址
zip_path = os.path.join(root, name)
# 解压
flag = decompress(zip_path, new_ws)
# 删除解压后的文件
# 有点危险
# 但不删除又可能会重复运行
# 一定要备份或先测试,不然可能会凉,自己选择修改
del_old_zip(zip_path)
# 去掉多余的文件结构
rem_dir_extra(root, name.replace(file_flag, ))
print(f{root}\\{name}.join([文件:, \n解压完成\n]))
# 由于解压可能解了好几次 所以可能会有已经解压好的父级目录重名无法处理 这里要再处理一次
rem_dir_extra(os.path.split(parent_path)[0], os.path.split(parent_path)[1])
print("解压完成啦,记得检查有没有zip格式之外的呀!\n\n其他格式需要自己改一下了")
二、python批量压缩
压缩前:
压缩后:
代码如下:
import zipfileimport os
def zip_yasuo(start_dir):
file_news = start_dir + .zip
if not os.path.isfile(file_news):
z = zipfile.ZipFile(file_news, w, zipfile.ZIP_DEFLATED)
for dir_path, dir_names, file_names in os.walk(start_dir):
file_path = dir_path.replace(start_dir, )
file_path = file_path and file_path + os.sep or
for filename in file_names:
z.write(os.path.join(dir_path, filename), file_path+filename)
z.close()
if __name__ == "__main__":
base_path = r"E:\py\python3.7\test\test99\zip"
base_path_list = os.listdir(base_path)
for base_path_list_one in base_path_list:
base_path_list_one_dir = os.path.join(base_path,base_path_list_one)
# 子目录
print("准备压缩需要压缩的子目录", base_path_list_one_dir)
if os.path.isdir(base_path_list_one_dir):
zip_yasuo(base_path_list_one_dir)
到此这篇关于Python批量解压&压缩文件夹的示例代码的文章就介绍到这了,更多相关Python解压 压缩文件夹内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。