最近陆续把日常工作中每天重复的劳动,比如比对,校验,简单的工作,都实现了一键化,为此省却了不少时间
此为磨刀不误砍柴工
越来越懒,不解释,直接上代码
# 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