如何压缩在Python程序中新创建的文件夹?

时间:2012-07-09 12:50:46

标签: python zip

我有一个程序将所有文件放在不同的文件夹中,例如这些文件:

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

该程序创建3个不同的文件夹,其中包含第一个数字的名称和一个名为cat的子文件夹。现在我想压缩这些文件夹,但在启动程序之前我不知道每个文件夹的名称。如何在创建这些文件夹后立即压缩文件夹?

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)

1 个答案:

答案 0 :(得分: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开始替换你的行。