如何使用 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('output file name', 'zip', 'directory name')

示例

以下是如何使用 shutil.make_archive() 创建 ZIP 文件的示例 -

import shutil import os.path # Creating the ZIP file 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 file not created")

输出

以下是上述代码的输出 -

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 # Create a ZipFile Object with ZipFile('E:/Zipped file.zip', 'w') as zip_object: # Adding files that need to be zipped zip_object.write('E:/Folder to be zipped/Greetings.txt') zip_object.write('E:/Folder to be zipped/Introduction.txt') # Check to see if the zip file is created if os.path.exists('E:/Zipped file.zip'): print("ZIP file created") else: print("ZIP file not created")

输出

以下是上述代码的输出 -

ZIP file created

从整个目录创建 ZIP 文件

在此方法中,使用 for 循环遍历整个目录,然后将目录中存在的所有文件添加到使用 ZipFile 创建的 ZIP 文件中。

示例

以下是如何从整个目录创建 ZIP 文件的示例 -

import os from zipfile import ZipFile # Create object of ZipFile with ZipFile('E:/Zipped file.zip', 'w') as zip_object: # Traverse all files in directory for folder_name, sub_folders, file_names in os.walk('E:/Folder to be zipped'): for filename in file_names: # Create filepath of files in directory file_path = os.path.join(folder_name, filename) # Add files to zip file zip_object.write(file_path, os.path.basename(file_path)) if os.path.exists('E:/Zipped file.zip'): print("ZIP file created") else: print("ZIP file not created")

输出

以下是上述代码的输出 -

ZIP file created

从目录中的特定文件创建 ZIP 文件

在此方法中,lambda 函数用于过滤要添加到 ZIP 文件中的特定扩展名的文件。lambda 函数作为参数传递给一个函数,该函数根据扩展名过滤文件。

示例

以下是如何使用目录中的特定文件创建 ZIP 文件的示例 -

import os from zipfile import ZipFile def zip_csv(directory_name, zip_file_name, filter): # Create object of ZipFile with ZipFile(zip_file_name, 'w') as zip_object: # Traverse all files in directory for folder_name, sub_folders, file_names in os.walk(directory_name): for filename in file_names: # Filter for csv files if filter(filename): # Create filepath of files in directory file_path = os.path.join(folder_name, filename) # Add files to zip file zip_object.write(file_path, os.path.basename(file_path)) if __name__ == '__main__': zip_csv('E:/Folder to be zipped', 'E:/Zipped file.zip', lambda name: 'csv' in name) if os.path.exists('E:/Zipped file.zip'): print("ZIP file created with only CSV files") else: print("ZIP file not created")

输出

以下是上述代码的输出 -

ZIP file created with only CSV files

更新于: 2023-08-25

61K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告