'''
python中的tarfile模块实现文档的归档压缩和解压缩
功能:
把工作空间下面的所有文件,打包生成一个tar文件
同时提供一个方法把该tar文件中的一些文件解压缩到
指定的目录中
'''
运行效果:
如果在你计算机的C盘里面没有test目录,系统会自动创建该目录:c:\\test
如果在你计算机的c:\\test目录下面没有temp目录,系统会自动创建该目录:c:\\test\\temp
控制台输出:
Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
创建目录:[c:\test]
创建目录:[c:\test\temp]
获取工作空间下的所有文件...
打开文件:[c:\test\hongten.tar]
压缩文件:[fibo.py]
压缩文件:[main.py]
压缩文件:[pythonindex.html]
压缩文件:[test_arrange.py]
压缩文件:[test_array.py]
压缩文件:[test_blogs.py]
压缩文件:[test_calendar.py]
压缩文件:[test_calendar_html.py]
压缩文件:[test_class.py]
压缩文件:[test_collections]
压缩文件:[test_collections.py]
压缩文件:[test_copy.py]
压缩文件:[test_count.py]
压缩文件:[test_email.py]
压缩文件:[test_email_send.py]
压缩文件:[test_filecmp.py]
压缩文件:[test_for.py]
压缩文件:[test_function.py]
压缩文件:[test_glob.py]
压缩文件:[test_gzip.py]
压缩文件:[test_linecache.py]
压缩文件:[test_list.py]
压缩文件:[test_modules.py]
压缩文件:[test_more_mudels.py]
压缩文件:[test_mysql.py]
压缩文件:[test_n.py]
压缩文件:[test_os.py]
压缩文件:[test_pprint.py]
压缩文件:[test_qq.py]
压缩文件:[test_shutil.py]
压缩文件:[test_stat.py]
压缩文件:[test_tar.py]
压缩文件:[test_tempfile.py]
压缩文件:[test_tkinter.py]
压缩文件:[test_truth_value.py]
压缩文件:[test_wifi.py]
压缩文件:[test_windows.py]
压缩文件:[__pycache__]
关闭文件[c:\test\hongten.tar]
##################################################
打开文件:[c:\test\hongten.tar]
获取到所有文件名称:['fibo.py', 'main.py', 'pythonindex.html', 'test_arrange.py', 'test_array.py', 'test_blogs.py', 'test_calendar.py', 'test_calendar_html.py', 'test_class.py', 'test_collections', 'test_collections.py', 'test_copy.py', 'test_count.py', 'test_email.py', 'test_email_send.py', 'test_filecmp.py', 'test_for.py', 'test_function.py', 'test_glob.py', 'test_gzip.py', 'test_linecache.py', 'test_list.py', 'test_modules.py', 'test_more_mudels.py', 'test_mysql.py', 'test_n.py', 'test_os.py', 'test_pprint.py', 'test_qq.py', 'test_shutil.py', 'test_stat.py', 'test_tar.py', 'test_tempfile.py', 'test_tkinter.py', 'test_truth_value.py', 'test_wifi.py', 'test_windows.py', '__pycache__', '__pycache__/fibo.cpython-33.pyc']
提取文件:[pythonindex.html]
>>>
=================================================
代码部分:
=================================================
1 #python tar
2
3 #Author : Hongten
4 #MailTo : hongtenzone@foxmail.com
5 #QQ : 648719819
6 #Blog : http://www.cnblogs.com/hongten
7 #Create : 2013-08-19
8 #Version: 1.0
9
10 import os
11 import tarfile
12 '''
13 python中的tarfile模块实现文档的归档压缩和解压缩
14
15 功能:
16 把工作空间下面的所有文件,打包生成一个tar文件
17 同时提供一个方法把该tar文件中的一些文件解压缩到
18 指定的目录中
19 '''
20 #global var
21 SHOW_LOG = True
22 #tar文件存放位置
23 TAR_PATH = ''
24 #取出文件存放目录
25 EXT_PATH = ''
26
27 def write_tar_file(path, content):
28 '''打开指定path的tar格式的文件,如果该文件不存在
29 系统会自动创建该文件,如果该文件以及存在,则打开文件
30 打开文件后,向文件中添加文件(这个功能类似于把几个文件
31 打包成tar包文件)'''
32 with tarfile.open(path, 'w') as tar:
33 if SHOW_LOG:
34 print('打开文件:[{}]'.format(path))
35 for n in content:
36 if SHOW_LOG:
37 print('压缩文件:[{}]'.format(n))
38 tar.add(n)
39 if SHOW_LOG:
40 print('关闭文件[{}]'.format(path))
41 tar.close()
42
43 def get_workspace_files():
44 '''获取工作空间下面的所有文件,然后以列表的形式返回'''
45 if SHOW_LOG:
46 print('获取工作空间下的所有文件...')
47 return os.listdir('./')
48
49 def extract_files(tar_path, ext_path, ext_name):
50 '''解压tar文件中的部分文件到指定目录中'''
51 with tarfile.open(tar_path) as tar:
52 if SHOW_LOG:
53 print('打开文件:[{}]'.format(tar_path))
54 names = tar.getnames()
55 if SHOW_LOG:
56 print('获取到所有文件名称:{}'.format(names))
57 for name in names:
58 if name.split('.')[-1] == ext_name:
59 if SHOW_LOG:
60 print('提取文件:[{}]'.format(name))
61 tar.extract(name, path = ext_path)
62
63 def mkdir(path):
64 '''创建不存在的目录'''
65 if os.path.exists(path):
66 if SHOW_LOG:
67 print('存在目录:[{}]'.format(path))
68 else:
69 if SHOW_LOG:
70 print('创建目录:[{}]'.format(path))
71 os.mkdir(path)
72
73 def init():
74 global SHOW_LOG
75 SHOW_LOG = True
76 #tar文件存放位置
77 global TAR_PATH
78 TAR_PATH = 'c:\\test\\hongten.tar'
79 #取出文件存放目录
80 global EXT_PATH
81 EXT_PATH = 'c:\\test\\temp'
82 #创建目录,如果目录不存在
83 path = os.path.split(TAR_PATH)[0]
84 mkdir(path)
85 mkdir(EXT_PATH)
86
87 def main():
88 init()
89 content = get_workspace_files()
90 #打包文件
91 write_tar_file(TAR_PATH, content)
92 print('#' * 50)
93 #提取文件
94 extract_files(TAR_PATH, EXT_PATH, 'html')
95
96
97 if __name__ == '__main__':
98 main()