2012-07-09 94 views
0

我有一個程序將所有文件放在不同的文件夾中,例如這些文件:如何壓縮在Python程序中新創建的文件夾?

20120809_1204567_cat_pic1.jpg 
    20120810_1204567_cat_pic1.jpg 
    20120811_1204567_cat_pic1.jpg 

該程序創建3個不同的文件夾名稱的第一個號碼和一個子文件夾的名稱貓。現在我想壓縮這些文件夾,但在啓動程序之前我不知道每個文件夾的名稱。如何在創建這些文件夾後立即壓縮文件夾?

import zipfile 
import glob 
import datetime 
import os 
from collections import defaultdict 
from shutil import copyfile 

src = 'D:/Testing/src/' 

for name in glob.glob('D:/Testing/src/*'): 
print name 

dict_date = defaultdict(lambda : defaultdict(list)) 
for fil in os.listdir(src): 
    if os.path.isfile(os.path.join(src, fil)): 
     date, animal = fil.split('_')[0], fil.split('_')[2] 
     dict_date[date][animal].append(fil) 

for date in dict_date: 
    for animal in dict_date[date]: 
     try: 
      os.makedirs(os.path.join(src, date, animal)) 
     except os.error: 
      pass 
     for fil in dict_date[date][animal]: 
      copyfile(os.path.join(src, fil), os.path.join(src, date, animal, fil)) 



directory = src 
os.chdir(directory) 
files = glob.glob('*.txt') 
for filename in files: 
    os.unlink(filename) 

files2 = glob.glob('*.png') 
for filename in files2: 
os.unlink(filename) 
+0

你有沒有試過shutil.make_archive()? – jfs 2012-07-09 13:28:36

回答

0

隨着每一個文件夾的zip文件:

>>> for date in dict_date: 
with ZipFile(os.path.join(path, date, '{0}.zip'.format(date)), 'w') as myzip: 
    for animal in dict_date[date]: 
     for fil in os.listdir(os.path.join(path, date, animal)): 
      if fil.endswith('.jpg'): 
       myzip.write(os.path.join(path, date, animal, fil)) 

這應該更換你的線條從directory = src開始。

+0

其工作,但問題是,所有文件夾現在在一個zip文件,但我需要每個文件夾分開一個zip文件,並不是所有文件夾都在一個。並且每個zip文件都應該獲取分離文件夾的名稱 – zeromancer 2012-07-09 13:26:08

+0

已更新,請檢查新版本! – Emmanuel 2012-07-09 13:36:50

+0

現在他是壓縮子文件夾貓,但不是與日期的主文件夾,我需要主文件夾 – zeromancer 2012-07-09 13:44:52

相關問題