''' 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()