本文实例讲述了Python实现多级目录压缩与解压文件的方法。分享给大家供大家参考,具体如下:
咱向来就是拿来主意,也发个东西供同行“拿来”使用吧
咱信奉的就是少量的代码完成大量的工作,虽然代码不多,但还是要用大脑的。发出来供大家参考
功能:
- 支持中文路径,支持多级目录
- 支持跨平台,在linux和window下都可直接使用
-
压缩的多态性
- 压缩包不带级父文件夹目录压缩
- 压缩包带父级文件夹目录
- 不指定目标文件与路径压缩
- 指定压缩包名称不指定路径压缩
还是看代码吧
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
#coding:utf-8
#压缩解压文件模块
#支持中文路径,支持多级目录
#支持跨平台,在linux和window下都可直接使用
#python 2.7.2
#author:xieShuxu
#QQ:258356793
#Email:sondx@qq.com
import zipfile,os
class ZipException(Exception):
pass
def unZipFile(zipPath,unZipPath = ''):
'''解压文件
zipPath 要解压的文件路径
unZipPath 解压目标路径 默认解压到zipPath所在目录
'''
try :
filePath = filePath.decode( 'utf-8' );
zipFilePath = zipFilePath.decode( 'utf-8' );
except :
print '================'
if not os.path.exists(zipPath):
raise ZipException, 'function unZipFile:not exists file or dir(%s)' % zipPath;
if unZipPath = = '':
unZipPath = os.path.splitext(zipPath)[ 0 ];
if not unZipPath.endswith(os.sep):
unZipPath + = os.sep;
z = zipfile.ZipFile(zipPath, 'r' )
#zipInfolist=z.namelist();
for k in z.infolist():
savePath = unZipPath + k.filename;
saveDir = os.path.dirname(savePath);
if not os.path.exists(saveDir):
os.makedirs(saveDir);
f = open (savePath, 'wb' );
f.write(z.read(k));
f.close();
z.close();
#print unZipPath
global _iterateExeZipFile;
def exeZipFile(filePath,zipFilePath = ''):
'''压缩文件
filePath 要解压的文件路径 可以是文件或者目录
os.sep结尾表示压缩该目录下的子文件和文件夹 不包含该文件夹,否则包含该文件夹压缩
ZipFilePath 压缩包文件路径
也可只传文件名
默认压缩到filePath的父级目录下
'''
filePath = filePath.decode( 'utf-8' );
zipFilePath = zipFilePath.decode( 'utf-8' );
#压缩文件不存在直接返回
if not os.path.exists(filePath):
raise ZipException, 'function exeZipFile:not exists file or dir(%s)' % filePath;
# 是否包含父级目录压缩
hasPDir = not filePath.endswith(os.sep);
if not hasPDir:
filePath = os.path.dirname(filePath);
print filePath
#校验备份文件路径
if zipFilePath = = '':
zipFilePath = os.path.splitext(filePath)[ 0 ] + '.zip' ;
elif zipFilePath.find(os.sep) = = - 1 : #只传文件名的处理
zipFilePath = os.path.dirname(filePath) + os.sep + zipFilePath;
#校验创建备份路径目录
if not os.path.exists(os.path.dirname(zipFilePath)):
os.makedirs(os.path.dirname(zipFilePath));
#初始化压缩包中的根目录
zipRoot = '';
if hasPDir:
zipRoot = os.path.split(filePath)[ 1 ];
#开始压缩
z = zipfile.ZipFile(zipFilePath, 'w' )
if os.path.isfile(filePath):
z.write(filePath,os.path.split(filePath)[ 1 ]);
else :
_iterateExeZipFile(filePath,zipRoot,z);
z.close();
def _iterateExeZipFile(dirPath,zipRoot,z):
|
压缩使用的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
if __name__ = = '__main__' :
#压缩包不带级父文件夹目录
testdir = 'D:\\codeSource\\linuxAgent\\'
zipFilePath = 'D:\\codeSource\\压缩包不带父级目录.zip'
exeZipFile(testdir,zipFilePath);
#压缩包带父级文件夹目录
testdir = 'D:\\codeSource\\linuxAgent' #不带后缀斜线
zipFilePath = 'D:\\codeSource\\压缩包带父级目录.zip'
exeZipFile(testdir,zipFilePath);
#不指定目标文件与路径压缩
testdir = 'D:\\codeSource\\linuxAgent'
exeZipFile(testdir);
#指定压缩包名称不指定路径压缩
testdir = 'D:\\codeSource\\linuxAgent\\'
exeZipFile(testdir, '仅指定名称压缩包.zip' );
|
解压的例子:
1
2
3
4
5
6
7
|
#指定解压目录解压文件
testdir = u 'D:\\codeSource\\仅指定名称压缩包\\'
zipFilePath = u 'D:\\codeSource\\仅指定名称压缩包.zip'
unZipFile(zipFilePath,testdir);
#不指定目录解压
zipFilePath = u 'D:\\codeSource\\仅指定名称压缩包.zip'
unZipFile(zipFilePath);
|
好了!就这么多,如果你觉得有用就顶一下吧。有问题也可以联系我
希望本文所述对大家Python程序设计有所帮助。
原文链接:https://blog.csdn.net/sondx/article/details/6838165