Python——1.5 办公自动化之 压缩和解压

读取压缩包

常用压缩格式有zip、rar。zip 包随python安装自带-zipfile,rar需要单独安装包 pip install rarfile。

读取压缩包文件
zipfile.ZipFile(‘压缩包名称’,‘r’) rarfile.RarFile(‘压缩包名称’,‘r’) namelist()
‘r’ 读取

zip压缩包

import zipfile
with zipfile.ZipFile('新的压缩包.zip','r') as zipobj:
	print(zipobj.namelist())

rar压缩包

import rarfile
with rarfile.RarFile('新的压缩包.rar','r') as rarobj:
	print(rarobj.namelist())

解决压缩包内中文文件名乱码

rar 代码于zip相同

.encode(‘cp437’) .decode(‘gbk’)

import zipfile
with zipfile.ZipFile('新的压缩包.zip','r') as zipobj:
	for file_name in zipobj.namelist():
		print(file_name.encode('cp437').decode('gbk'))

读取压缩包内文件信息
zipobj.getinfo()

import zipfile
with zipfile.ZipFile('新的压缩包.zip','r') as zipobj:
	for file_name in zipobj.namelist():
		info = zipobj.getinfo(file_name)
		file_name = file_name.encode('cp437').decode('gbk')
		print(file_name,info.file_size,info.compress_size)

说明:

  • .file_size是原始文件大小
  • .compress_size是压缩后大小
  • 输出结果单位是字节

解压压缩包

解压压缩包单个文件
.extract(压缩包内要解压的文件名,解压到那个位置)

import zipfile
with zipfile.ZipFile('新的压缩包.zip','r') as zipobj:
	zipobj.extract('file.txt','c:/user/desktop/')

注意:中文文件名解压后会出现乱码问题

中文乱码解决

for file_name in zipobj.namelist():
	file_path = file_name.encode('cp437').decode('gbk')

建议路径中文件和文件夹不要出现中文
如果有中文可以先获取正确的编码文字,再重命名

解压所有文件
.extractall(path = 解压到哪个位置)

with zipfile.ZipFile('新的压缩包.zip','r') as zipobj:
	zipobj.extractall(path = './')

解压含有密码的压缩包
.extractall(path = ‘解压到哪个位置’,pwd = b’密码’)

with zipfile.ZipFile('新的压缩包.zip','r') as zipobj:
	zipobj.extractall(path = './',pwd = b'passwd')

创建压缩包

创建压缩包
.write(新建压缩包名)

import zipfile
file_list = ['file1.txt','file2.txt'.'file3.txt']
with zipfile.ZipFile('新压缩包.zip','w') as zipobj:
	for file in file_list:
		zipobj.write(file)

向已有压缩包添加文件

with zipfile.ZipFile('新压缩包.zip',.'a') as zipobj:
	zipobj.write('file4.txt')

综合应用

要求:

  1. 找出当前目录下所有距离上次修改时间超过3个月的文件
  2. 将所有文件重命名,再原本文件名开头加上最后修改日期
  3. 创建一个新的文件夹backup
  4. 将所有重命名后的文件都添加到压缩包里,给压缩包名字加上今天日期
  5. 将压缩包移动到backup里面
  6. 删除原始文件
import os
import shutil
import zipfile
from datetime inport datetime

if not os.path.exists('backup'):
	os.mkdir('backup')
file_list = []
for file in os.scandir():
	if not file.is_dir():
		file_time = file.stat().st_mtime
		file_datetime = datetime.fromtimestamp(file_time)
		datetime_delta = datetime.now() - file_datetime
		if datetime_delta.days >= 3 * 31:
			new_name = f'{file_datetime.strftime("%Y-%m-%d")}-(file.name)'
			os.rename(file.name,new_name)
			file_list.append(new_name)
	print(file_list)
	zip_filename = f'{datetime.now().strftime("%Y-%m-%d")}.zip'
	with zipfile.ZipFile(zip_filename,'w') as zipobj:
		for file in file_list:
			zipobj.write(file)
shutil.move(zip_filename,'backup/')
for file in file_list:
	os.remove(file)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值