创建和解压压缩包

这篇博客介绍了如何使用Python的zipfile模块来操作压缩包,包括读取压缩包内文件、处理中文文件名、读取文件信息、解压单个和所有文件、解压带密码的压缩包以及创建和向已有压缩包添加文件。通过示例代码展示了具体实现方法。

读取压缩包内文件
import zipfile
with zipfile.ZipFile(‘压缩包.zip’,‘r’) as zip1:
print(zip1.namelist())
#文件名含有中文会出现乱码

处理压缩包内的中文
with zipfile.ZipFile(‘压缩包.zip’,‘r’) as zip2:
for file_name in zip2.namelist():
print(file_name.encode(‘cp437’).decode(‘gbk’))

读取压缩包内文件信息
with zipfile.ZipFile(‘压缩包.zip’,‘r’) as zip3:
for file_name in zip2.namelist():
info=zip3.getinfo(file_name)
new_filename=file_name.encode(‘cp437’).decode(‘gbk’)
print(new_filename,info.file_size,info.compress_size)
#compress_size为压缩后的文件大小

将压缩包内单个文件解压出来
with zipfile.ZipFile(‘压缩包.zip’,‘r’) as zip4:
zip4.extract(‘file.txt’) #zip.extract(文件名,解压位置),默认为目录位置
中文乱码解决方法(先获取正确的编码文字及乱码文字,再重命名)
with zipfile.ZipFile(‘压缩包.zip’,‘r’) as zip4:
zip4.extract(‘乱码.txt’)

将所有文件提取出来
with zipfile.ZipFile(‘压缩包.zip’,‘r’) as zip4:
zip4.extractall() #zip.extractall(path=‘解压位置’)

解压有密码的压缩包
with zipfile.ZipFile(‘有密码的压缩包.zip’,‘r’) as zip5:
zip5.extractall(path=‘解压位置’,pwd=b’解压密码’)

创建压缩包
file_list=[‘file1’,‘file2’]
with zipfile.ZipFile(‘压缩包.zip’,‘w’) as zip6:
for file in file_list:
zip6.write(file)

向已有压缩包添加文件
with zipfile.ZipFile(‘已有的压缩包.zip’,‘a’) as zip7:
zip7.write(‘file’)
学习链接:https://www.bilibili.com/video/BV197411f7Rp

### 解压缩包时无法创建文件的解决方案 当遇到解压缩包时无法创建文件的问题,可能的原因包括权限不足、目标路径不存在或不可写入、压缩包损坏以及操作系统之间的兼容性问题等。以下是针对该问题的具体分析和解决方法: #### 1. 权限不足 如果当前用户没有足够的权限访问目标目录,则可能导致无法创建文件。可以通过提升权限解决问题: - **Windows**: 使用管理员身份运行解工具。 - **Linux/Unix**: 添加 `sudo` 提权命令,例如: ```bash sudo unzip archive.zip -d /target/directory/ ``` 此操作可以确保有足够的权限完成文件的创建和写入[^2]。 #### 2. 目标路径不存在或不可写入 在某些情况下,指定的目标路径可能不存在或者不具备可写入属性。建议先验证并修复这些问题: - 验证路径是否存在: ```bash ls /path/to/target ``` - 如果路径不存在,手动创建它: ```bash mkdir -p /path/to/target ``` - 设置正确的权限以便于写入: ```bash chmod 755 /path/to/target chown user:user /path/to/target ``` 这些步骤能够有效避免因路径问题而导致的失败情况[^3]。 #### 3. 压缩包本身存在问题 有时压缩包可能存在数据丢失或其他形式的损坏,这也会阻止正常解过程。为了确认这一点,可以尝试以下措施: - 利用 `-t` 参数测试压缩包完整性(适用于 `unzip` 工具): ```bash unzip -t archive.zip ``` - 若发现确实存在错误,联系提供者重新获取一份完整的副本;或者利用专门的数据恢复软件尝试修复受损档案。 #### 4. 跨平台兼容性引发冲突 不同平台上生成的缩文件可能会因为编码差异等原因引起误解码现象。比如 Windows 上制作带有中文名称条目的 RAR 分卷,在 Linux 下直接打开时常会报错找不到对应实体对象。对此类状况推荐采取如下策略处理: - 将所有涉及字符转换的任务交由支持 UTF8 的高级版本应用程序负责; - 对于特定类型的多部分文档集合作品则需单独提取每一段后再拼接还原整体结构——即按照官方指导手册里提到的方式逐一解析各组成部分再组合起来形成最终产物。 通过上述四种途径之一或多方面结合运用即可妥善处置绝大多数关于“解压缩包时候不能建立新文件”的难题情境。 ```python import os from zipfile import ZipFile def extract_zip(zip_path, target_dir): """ 安全地解 ZIP 文件至指定目录 """ if not os.path.exists(target_dir): os.makedirs(target_dir) with ZipFile(zip_path, 'r') as zip_ref: zip_ref.extractall(target_dir) extract_zip('archive.zip', '/safe/path/') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值