本文共 1996 字,大约阅读时间需要 6 分钟。
ZIP文件格式是数据存储和压缩的标准形式之一,ZIP模块为操作ZIP文件提供了多种功能,包括创建、读取、写入、附加和列出。ZIP64扩展支持让文件大小超过4GB,能够解压加密的ZIP文件,但解密速度较慢。
使用is_zipfile()函数可以判断文件是否为ZIP格式,返回布尔值。若文件不存在或不是ZIP文件,函数返回False。以下代码示例:
#!/usr/bin/pythonimport zipfilefor filename in ['print_name.py', 'python.zip', 'uwsgi', 'admin']: print(f"{filename} {zipfile.is_zipfile(filename)}") 运行结果显示,print_name.py和admin文件不存在或不是ZIP文件,python.zip是真实的ZIP文件。
使用namelist()获取ZIP文件中的文件列表。代码如下:
#!/usr/bin/env pythonimport zipfilezf = zipfile.ZipFile('python.zip', 'r')print(zf.namelist()) 运行结果显示,python.zip文件包含文件test.txt。要获取更多信息,可以使用infolist()或getinfo()方法。
读取ZIP文件中的具体文件内容,使用read()方法。代码如下:
#!/usr/bin/env pythonimport zipfilezf = zipfile.ZipFile('python.zip')for filename in ['test.txt', 'notthere.txt']: try: data = zf.read(filename) print(f"{filename}: {repr(data)}") except KeyError: print(f"ERROR: Did not find {filename} in zip file") 提取的文件会自动解压。如果文件不存在,会抛出KeyError错误。
创建新的ZIP文件时,使用ZipFile对象的write()方法。默认情况下不压缩文件,代码如下:
#!/usr/bin/env pythonfrom zipfile import ZipFilezf = ZipFile('zipfile_write.zip', 'w')try: zf.write('text.txt')finally: zf.close()print("File written successfully.") 如果需要压缩文件,需要启用zlib模块,设置压缩模式为ZIP_DEFLATED或ZIP_STORED。代码如下:
#!/usr/bin/env pythonimport zipfileimport zlibtry: compression = zipfile.ZIP_DEFLATEDexcept: compression = zipfile.ZIP_STOREDmodes = { zipfile.ZIP_DEFLATED: 'deflated', zipfile.ZIP_STORED: 'stored'}zf = zipfile.ZipFile('zipfile_write_compression.zip', 'w')try: print(f"Adding text.txt with compression mode: {modes[compression]}") zf.write('text.txt', compress_type=compression)finally: zf.close()print("File written successfully.") 在写入ZIP文件时,可以指定文件名,代码如下:
#!/usr/bin/env pythonfrom zipfile import ZipFilezf = ZipFile('zipfile_write_arcname.zip', 'w')try: zf.write('text.txt', arcname='NOT_README.txt')finally: zf.close()print("File written successfully.") 以上内容可以根据实际需求进行修改和扩展,建议结合实际项目需求进行测试和优化。
转载地址:http://vgafk.baihongyu.com/