Python zipfile – Python ZIP

时间:2020-02-23 14:43:42  来源:igfitidea点击:

Python zipfile模块可帮助我们处理zip文件。
今天,我们将学习如何读取zip存档详细信息,如何使用zipfile模块创建和提取zip文件。

如果您不知道,Python中有一个内置的zip()函数。
您可以在AppDividend Python zip()教程中阅读有关它的全部信息。

Python zipfile

Python的zipfile模块对于甚至生产级应用程序也很重要。
这是由于以下原因:在服务器上,通常将通过Web应用程序上传的文件压缩后保存,以节省昂贵的服务器空间。
让我们开始使用zipfile模块示例。
这个python模块也类似于python tarfile模块。

请注意,出于演示目的,我们有一个名为" Archive.zip"的ZIP文件,其中包含一些文本文件,并且该ZIP文件位于运行程序的目录中。

读取一个ZIP文件

我们将从列出ZIP存档内的文件开始。
这是一个示例程序:

import zipfile

zip_archive = zipfile.ZipFile("Archive.zip", "r")

# list file information
for file_info in zip_archive.infolist():
  print(file_info.filename, file_info.date_time, file_info.file_size)

我们能够列出存档中存在的文件以及文件的一些元数据。
请注意,该过程确实非常快,因为我们无需在读取文件之前就将其解压缩。

创建一个ZIP文件

接下来,我们将研究如何制作ZIP文件(这也是我们制作的方式)。
为了创建一个新的存档,我们将以w模式创建一个ZipFile实例。
请注意,如果存在同名文件,则该文件将被完全截断。
因此,请确保您的文件名是唯一的。

让我们看一下使用zipfile模块创建一个zip文件的代码段:

import zipfile

archive = zipfile.ZipFile('Archive.zip', mode='w')
try:
  archive.write('hello.txt')
  archive.write('second.txt')
  print('Files added.')
finally:
  print('Reading files now.')
  archive.close()

zip_archive = zipfile.ZipFile("Archive.zip", "r")

# list file information
for file_info in zip_archive.infolist():
  print(file_info.filename, file_info.date_time, file_info.file_size)

检查有效的ZIP文件

我们还可以测试所提到的文件是否为有效的ZIP存档。
这是一个示例程序:

import zipfile

test_files = ['check_if_zipfile.py', 'Archive.zip']

for file in test_files:
  print('ZIP status for {0}: {1}'.format(file, zipfile.is_zipfile(file)))

解压缩ZIP存档

让我们看一下代码片段:

import zipfile

print('Extracting ZIP.')
archive = zipfile.ZipFile('Archive.zip', 'r')

# Extract to current directory
archive.extractall('.')
print('ZIP Extracted.')

archive.close()

请注意,这里没有建立新目录,而是将文件放在同一目录中。
如果要将文件放在特定位置,请提及目录。

使用其他名称将文件添加到ZIP

可以使用其他名称将成员文件添加到存档中。
这是一个示例程序,显示了如何完成此操作:

import zipfile

print('Creating Archive.zip.')
archive = zipfile.ZipFile('Archive.zip', mode='w')
try:
  archive.write('hello.txt', arcname='some_hello.txt')
  archive.write('second.txt', arcname='another.txt')
finally:
  archive.close()

print('ZIP created with different name.')