Заархивируйте несколько подкаталогов с указанием пути к отдельным почтовым индексам

Мне нужна помощь в редактировании следующего скрипта, который архивирует содержимое каталога. Моя конечная цель - создать сценарий, который будет смотреть на C: \ Test (внутри которого будет несколько каталогов) и создавать новый zip-файл с содержимым каждого каталога в C: \ Test. Сложность заключается в том, что мне нужен путь C: \, хотя истинные пути каталогов - C: \ Test. Возможно ли это или мне снится?

Спасибо

import zipfile, os

def makeArchive(fileList, archive):

    try:
        a = zipfile.ZipFile(archive, 'w', zipfile.ZIP_DEFLATED)
        for f in fileList:
            print "archiving file %s" % (f)
            a.write(f)
        a.close()
        return True
    except: return False

def dirEntries(dir_name, subdir, *args):

    fileList = []
    for file in os.listdir(dir_name):
        dirfile = os.path.join(dir_name, file)
        if os.path.isfile(dirfile):
            if not args:
                fileList.append(dirfile)
            else:
                if os.path.splitext(dirfile)[1][1:] in args:
                    fileList.append(dirfile)
        # recursively access file names in subdirectories
        elif os.path.isdir(dirfile) and subdir:
            print "Accessing directory:", dirfile
            fileList.extend(dirEntries(dirfile, subdir, *args))
    return fileList

if __name__ == '__main__':
    folder = r'C:\test'
    zipname = r'C:\test\test.zip'
    makeArchive(dirEntries(folder, True), zipname)

person Howard Dennis    schedule 05.03.2013    source источник


Ответы (1)


Вы можете изменить путь к файлу внутри архива следующим образом:

a.write(PATH_ON_FILESYSTEM, 
        DESIRED_PATH_IN_ARCHIVE
)
person GreenGuerilla    schedule 06.03.2013
comment
Кажется, я не могу изменить путь, но попробую позже. Что еще более важно, мне нужен scipt для создания нескольких файлов ZIP для каждого каталога. В настоящее время скрипт создает по одному большому ZIP-файлу с каждым каталогом внутри. - person Howard Dennis; 06.03.2013