zipfile 模块
是一个底层模块,是Python标准库的一部分。 zipfile 具有可以轻松打开和提取ZIP文件的函数。 要读取ZIP文件的内容,首先要做的是创建一个 ZipFile 对象。ZipFile 对象类似于使用 open() 创建的文件对象。ZipFile 也是一个上下文管理器,因此支持with语句:
import zipfilewith zipfile.ZipFile('data.zip', 'r') as zipobj:pass
这里创建一个ZipFile 对象
,传入ZIP文件的名称并以读取模式下打开。 打开ZIP文件后,可以通过 zipfile 模块
提供的函数访问有关存档文件的信息。 上面示例中的 data.zip 存档是从名为 data 的目录创建的,该目录包含总共5个文件和1个子目录:
要获取存档文件中的文件列表,请在 ZipFile 对象上调用 namelist()
:
import zipfilewith zipfile.ZipFile('data.zip', 'r') as zipobj:zipobj.namelist()
这会生成一个文件列表:
[‘file1.py’, ‘file2.py’, ‘file3.py’, ‘sub_dir/’, ‘sub_dir/bar.py’, ‘sub_dir/foo.py’]
.namelist()
返回存档文件中文件和目录的名称列表。要检索有关存档文件中文件的信息,使用 .getinfo()
:
import zipfilewith zipfile.ZipFile('data.zip', 'r') as zipobj:bar_info = info('sub_dir/bar.py')print(bar_info.file_size)
zipfile 模块允许你通过.extract()
和 .extractall()
从ZIP文件中提取一个或多个文件。
默认情况下,这些方法将文件提取到当前目录。 它们都采用可选的路径参数,允许指定要将文件提取到的其他指定目录。 如果该目录不存在,则会自动创建该目录。 要从压缩文件中提取文件,请执行以下操作:
>>> import zipfile
>>> import os>>> os.listdir('.')
['data.zip']>>> data_zip = zipfile.ZipFile('data.zip', 'r')>>> # 提取单个文件到当前目录
>>> act('file1.py')
'/home/test/dir1/zip_extract/file1.py'>>> os.listdir('.')
['file1.py', 'data.zip']>>> # 提所有文件到指定目录
>>> actall(path='extract_dir/')>>> os.listdir('.')
['file1.py', 'extract_dir', 'data.zip']>>> os.listdir('extract_dir')
['file1.py', 'file3.py', 'file2.py', 'sub_dir']>>> data_zip.close()
第三行代码是对 os.listdir() 的调用,它显示当前目录只有一个文件 data.zip 。
接下来,以读取模式下打开 data.zip 并调用 .extract() 从中提取 file1.py 。 .extract() 返回提取文件的完整文件路径。 由于没有指定路径,.extract() 会将 file1.py 提取到当前目录。
下一行打印一个目录列表,显示当前目录现在包括除原始存档文件之外的存档文件。 之后显示了如何将整个存档提取到指定目录中。.extractall() 创建 extract_dir 并将 data.zip 的内容提取到其中。 最后一行关闭ZIP存档文件。
zipfile 支持提取受密码保护的ZIP。 要提取受密码保护的ZIP文件,请将密码作为参数传递给 .extract() 或.extractall() 方法:
>>> import zipfile>>> with zipfile.ZipFile('secret.zip', 'r') as pwd_zip:
... # 从加密的文档提取数据
... actall(path='extract_dir', pwd='Quish3@o')
将以读取模式打开 secret.zip 存档。 密码提供给 .extractall() ,并且压缩文件内容被提取到 extract_dir 。 由于with语句,在完成提取后,存档文件会自动关闭。
本文发布于:2024-02-04 08:41:26,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170703341154049.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |