如何使用Python创建zip文件?
ZIP是一种用于无损数据压缩的存档文件格式。一个或多个目录或文件用于创建ZIP文件。ZIP支持多种压缩算法,DEFLATE是最常见的。ZIP文件的扩展名为.zip。在本文中,我们将讨论如何使用Python创建Zip文件。
在Python中创建未压缩的ZIP文件
未压缩的ZIP文件不会减少原始目录的大小。由于共享未压缩的ZIP文件没有优势,因此将其共享到网络上与共享原始文件相比并无利益。
使用shutil.make_archive创建Zip文件
Python有一个标准库shutil,可用于创建未压缩的ZIP文件。只有在将多个文件组织在单个文件中时才应使用此创建ZIP文件的方法。
语法
以下是shutil.make_archive的语法−
shutil.make_archive('输出文件名','zip','目录名称')
示例
以下是使用shutil.make_archive创建ZIP文件的示例−
import shutil
import os.path
# 创建ZIP文件
archived = shutil.make_archive('E:/Zipped file', 'zip', 'E:/Folder to be zipped')
if os.path.exists('E:/Zipped file.zip'):
print(archived)
else:
print("ZIP文件未创建")
输出
以下是上述代码的输出−
E:\Zipped file.zip
在Python中创建压缩的ZIP文件
压缩的ZIP文件通过应用压缩算法来减小原始目录的大小。压缩的ZIP文件使文件共享更快,因为ZIP文件的大小明显小于原始文件。
Python中的zipfile库允许使用不同的方法创建压缩的ZIP文件。
从多个文件创建ZIP文件
在此方法中,ZipFile()创建一个ZIP文件,其中添加要压缩的文件。这通过使用 with 关键字创建ZipFile对象,然后使用 .write() 方法编写文件来实现。
示例
以下是使用多个文件创建ZIP文件的示例−
import os
from zipfile import ZipFile
# 创建ZipFile对象
with ZipFile('E:/Zipped file.zip', 'w') as zip_object:
# 添加需要压缩的文件
zip_object.write('E:/Folder to be zipped/Greetings.txt')
zip_object.write('E:/Folder to be zipped/Introduction.txt')
# 检查zip文件是否创建
if os.path.exists('E:/Zipped file.zip'):
print("ZIP文件已创建")
else:
print("ZIP文件未创建")
输出
以下是上述代码的输出−
ZIP文件已创建
从整个目录创建ZIP文件
在这种方法中,使用for循环遍历整个目录,然后将目录中存在的所有文件添加到一个使用ZipFile创建的ZIP文件中。
示例
以下是从整个目录创建ZIP文件的示例:
import os
from zipfile import ZipFile
# 创建ZipFile对象
with ZipFile('E:/Zipped file.zip', 'w') as zip_object:
# 遍历目录中的所有文件
for folder_name, sub_folders, file_names in os.walk('E:/Folder to be zipped'):
for filename in file_names:
# 创建目录中文件的文件路径
file_path = os.path.join(folder_name, filename)
# 将文件添加到zip文件中
zip_object.write(file_path, os.path.basename(file_path))
if os.path.exists('E:/Zipped file.zip'):
print("ZIP文件创建成功")
else:
print("ZIP文件未创建")
输出
以下是上述代码的输出:
ZIP文件创建成功
从目录中的特定文件创建ZIP文件
在这种方法中,使用lambda函数过滤具有特定扩展名要添加到ZIP文件中的文件。将lambda函数作为参数传递给筛选文件的函数,基于扩展名筛选文件。
示例
以下是使用目录中的特定文件创建ZIP文件的示例:
导入 os
从 zipfile 导入 ZipFile
定义 zip_csv(directory_name, zip_file_name, filter):
# 创建ZipFile对象
with ZipFile(zip_file_name, 'w') 作为 zip_object:
# 遍历目录中的所有文件
对于 folder_name, sub_folders, file_names 在 os.walk(directory_name):
对于 文件名 在 file_names:
# 过滤csv文件
如果 filter(文件名):
# 创建文件的路径
file_path = os.path.join(folder_name, 文件名)
# 将文件添加到zip文件中
zip_object.write(file_path, os.path.basename(file_path))
如果__name__ == '__main__':
zip_csv('E:/Folder to be zipped', 'E:/Zipped file.zip', lambda name: 'csv' 在 name)
如果 os.path.exists('E:/Zipped file.zip'):
print("ZIP文件仅包含CSV文件")
否则:
print("未创建ZIP文件")
输出结果
如下是上面代码的输出结果-
ZIP文件仅包含CSV文件