import zipfile
import os
# 使用zipfile操作ZIP文件
# 创建和添加文件到 ZIP 文件、读取 ZIP 文件、从 ZIP 文件中解压缩、文件夹备份到 ZIP 文件
def createZipFile():
print("================创建和添加到 ZIP 文件==================")
zipFile = zipfile.ZipFile('test.zip', 'w')
# write()
# 第一个参数是一个字符串,代表要添加的文件名。
# 第二个参数是压缩类型,指定压缩算法。
# 可以总是将这个值设置为 zipfile.ZIP_DEFLATED(deflate 压缩算法,对各种类型的数据都很有效)。
zipFile.write('spam001.txt', compress_type=zipfile.ZIP_DEFLATED)
zipFile.write('spam003.txt', compress_type=zipfile.ZIP_DEFLATED)
zipFile.write('spam007.txt', compress_type=zipfile.ZIP_DEFLATED)
zipFile.close()
def readZipFileInfo():
print("================读取 ZIP 文件==================")
zipFile = zipfile.ZipFile("test.zip", 'r')
print(zipFile.namelist())
fileInfo = zipFile.getinfo('spam003.txt')
print(fileInfo)
print(fileInfo.file_size)
print(fileInfo.compress_size)
zipFile.close()
def unZipFile():
print("================从 ZIP 文件中解压缩==================")
file = zipfile.ZipFile("test.zip")
file.extractall() # 解压到当前工作目录
# file.extractall('./') # 解压到指定目录
# file.extract('spam001.txt') # 解压单个文件到当前工作目录
# file.extract('spam003.txt', './') # 解压单个文件到指定目录
file.close()
def delTxtFile():
# 删除文件
for rfile in os.listdir('./'):
if rfile.endswith('.txt'):
os.remove(rfile)
def doDocZip(path):
# 为整个文件夹创建一个 ZIP 文件,作为“快照”。
# 你希望保存不同的版本,希望 ZIP 文件的文件名每次创建时都有所变化。
# 例如 AlsPythonBook_1.zip、AlsPythonBook_2.zip、AlsPythonBook_3.zip,等等
# 确保为绝对路径
path = os.path.abspath(path)
basename = os.path.basename(path)
num = 1
while True:
# 用要压缩的目录名加序号作为备份的zip文件名
zipFileName = basename + "_" + str(num) + ".zip"
if os.path.exists("./file/" + zipFileName):
num += 1
else:
break
# 创建备份zip文件
print('Creating %s...' % zipFileName)
backZip = zipfile.ZipFile("./file/" + zipFileName, 'w')
# 遍历需要备份的目录,写入zip文件
for folderName, subFolders, fileNames in os.walk(path):
# folderName:当前目录名称的字符串
if len(os.listdir(folderName)) >= 1: # 空目录不压缩
print('Adding files in %s...' % folderName)
backZip.write(folderName, folderName)
# 当前目录中文件名称的字符串列表
for filename in fileNames:
if filename.startswith(basename) and filename.endswith(".zip"):
continue
else:
backZip.write(os.path.join(folderName, filename), compress_type=zipfile.ZIP_DEFLATED)
backZip.close()
print('Done.')