zipfile — ZIP 打包接口
优质
小牛编辑
129浏览
2023-12-01
测试ZIP文件
# zipfile_is_zipfile.py
import zipfile
for filename in ['README.txt', 'example.zip',
'bad_example.zip', 'notthere.zip']:
print('{:>15} {}'.format(
filename, zipfile.is_zipfile(filename)))
从归档中读取元数据
# zipfile_namelist.py
import zipfile
with zipfile.ZipFile('example.zip', 'r') as zf:
print(zf.namelist())
# zipfile_infolist.py
import datetime
import zipfile
def print_info(archive_name):
with zipfile.ZipFile(archive_name) as zf:
for info in zf.infolist():
print(info.filename)
print(' Comment :', info.comment)
mod_date = datetime.datetime(*info.date_time)
print(' Modified :', mod_date)
if info.create_system == 0:
system = 'Windows'
elif info.create_system == 3:
system = 'Unix'
else:
system = 'UNKNOWN'
print(' System :', system)
print(' ZIP version :', info.create_version)
print(' Compressed :', info.compress_size, 'bytes')
print(' Uncompressed:', info.file_size, 'bytes')
print()
if __name__ == '__main__':
print_info('example.zip')
# zipfile_getinfo.py
import zipfile
with zipfile.ZipFile('example.zip') as zf:
for filename in ['README.txt', 'notthere.txt']:
try:
info = zf.getinfo(filename)
except KeyError:
print('ERROR: Did not find {} in zip file'.format(
filename))
else:
print('{} is {} bytes'.format(
info.filename, info.file_size))
从存档中提取归档文件
# zipfile_read.py
import zipfile
with zipfile.ZipFile('example.zip') as zf:
for filename in ['README.txt', 'notthere.txt']:
try:
data = zf.read(filename)
except KeyError:
print('ERROR: Did not find {} in zip file'.format(
filename))
else:
print(filename, ':')
print(data)
print()
创建新归档
# zipfile_write.py
from zipfile_infolist import print_info
import zipfile
print('creating archive')
with zipfile.ZipFile('write.zip', mode='w') as zf:
print('adding README.txt')
zf.write('README.txt')
print()
print_info('write.zip')
# zipfile_write_compression.py
from zipfile_infolist import print_info
import zipfile
try:
import zlib
compression = zipfile.ZIP_DEFLATED
except (ImportError, AttributeError):
compression = zipfile.ZIP_STORED
modes = {
zipfile.ZIP_DEFLATED: 'deflated',
zipfile.ZIP_STORED: 'stored',
}
print('creating archive')
with zipfile.ZipFile('write_compression.zip', mode='w') as zf:
mode_name = modes[compression]
print('adding README.txt with compression mode', mode_name)
zf.write('README.txt', compress_type=compression)
print()
print_info('write_compression.zip')
使用备用归档成员名
# zipfile_write_arcname.py
from zipfile_infolist import print_info
import zipfile
with zipfile.ZipFile('write_arcname.zip', mode='w') as zf:
zf.write('README.txt', arcname='NOT_README.txt')
print_info('write_arcname.zip')
写入数据文件以外的来源
# zipfile_writestr.py
from zipfile_infolist import print_info
import zipfile
msg = 'This data did not exist in a file.'
with zipfile.ZipFile('writestr.zip',
mode='w',
compression=zipfile.ZIP_DEFLATED,
) as zf:
zf.writestr('from_string.txt', msg)
print_info('writestr.zip')
with zipfile.ZipFile('writestr.zip', 'r') as zf:
print(zf.read('from_string.txt'))
使用ZipInfo实例写
# zipfile_writestr_zipinfo.py
import time
import zipfile
from zipfile_infolist import print_info
msg = b'This data did not exist in a file.'
with zipfile.ZipFile('writestr_zipinfo.zip',
mode='w',
) as zf:
info = zipfile.ZipInfo('from_string.txt',
date_time=time.localtime(time.time()),
)
info.compress_type = zipfile.ZIP_DEFLATED
info.comment = b'Remarks go here'
info.create_system = 0
zf.writestr(info, msg)
print_info('writestr_zipinfo.zip')
附加文件
# zipfile_append.py
from zipfile_infolist import print_info
import zipfile
print('creating archive')
with zipfile.ZipFile('append.zip', mode='w') as zf:
zf.write('README.txt')
print()
print_info('append.zip')
print('appending to the archive')
with zipfile.ZipFile('append.zip', mode='a') as zf:
zf.write('README.txt', arcname='README2.txt')
print()
print_info('append.zip')
Python ZIP归档
# zipfile_pyzipfile.py
import sys
import zipfile
if __name__ == '__main__':
with zipfile.PyZipFile('pyzipfile.zip', mode='w') as zf:
zf.debug = 3
print('Adding python files')
zf.writepy('.')
for name in zf.namelist():
print(name)
print()
sys.path.insert(0, 'pyzipfile.zip')
import zipfile_pyzipfile
print('Imported from:', zipfile_pyzipfile.__file__)