如何使用Python创建zip文件?

如何使用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文件

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程