python開發_tarfile_文檔歸檔壓縮|解壓縮


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM