python脚本-- 压缩文件夹


参考文章:

http://www.cnblogs.com/yyds/p/6427349.html

https://www.rddoc.com/doc/Python-3.6.0/library/zipfile/


需求: 备份文件夹生成zip

  1. 输入物 –> 文件路径
  2. 输出物 –> 压缩包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/python
#-*- coding:utf-8 -*-
import zipfile
import os
def hh_zipfile(filepath):
#去掉路径最后的 `/`
if filepath.endswith('/'):
filepath=filepath[0:-1]
# 获取路径的文件及名称
zipfilename = os.path.basename(filepath)
if zipfilename :
print(zipfilename)
else :
zipfilename = '归档'
# 生成一个zip文件
f = zipfile.ZipFile(zipfilename + '.zip','w',zipfile.ZIP_DEFLATED)
# 遍历当前路径下的所有文件
for parent, dirnames, filenames in os.walk(filepath):
for filename in filenames:
# 拼全路径
filenamepath = os.path.join(parent, filename)
# 如果是当前文件路径下的子路径,就获取子路径名字
subpath = os.path.relpath(filenamepath,start=filepath)
# 将文件写入到zip文件中 后面的 `zipfilename + '/' + subpath` 配置zip文件目录层级结构 ,不填的话会默认为传入的路径层级结构
f.write(filenamepath,zipfilename + '/' + subpath)
# 不执行close 不会在硬盘写入
f.close
# 输入文件路径
filepath = input('输入待压缩文件夹!\n')
if os.path.isdir(filepath): #如果文件路径存在就压缩
hh_zipfile(filepath)
else :
print ('请输入正确的文件路径')

zipfile是归档压缩标准。

zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True)

  1. file : 文件 path,可以理解为压缩后的文件名字
  2. mode : r 读取存在的文件 w新建一个或者覆盖原来的 a 向原来的文件追加 x生成新文件
  3. compression : 压缩方法, 默认为ZIP_STORED 详细信息
  4. allowZip64 : 当zip文件大于2 GiB时,zipfile将创建使用ZIP64扩展名的ZIP文件

os.path.basename(path)返回路径名的基名称

os.path.relpath(path,start=path1) 返回path相对于path1的路径