[Решено] Python скрпит архивирования директории

Модератор: Модераторы разделов

Аватара пользователя
ffldove
Сообщения: 480
Статус: Keep It Simple, Stupid
ОС: RFRemix 14

[Решено] Python скрпит архивирования директории

Сообщение ffldove »

Есть скрипт

Код: Выделить всё

def mk_zip_version(fileList, new_version_zip):
        if os.path.exists(new_version_zip):
            shutil.rmtree(new_version_zip)
        file = zipfile.ZipFile(new_version_zip, 'w', zipfile.ZIP_DEFLATED)
        for ind in fileList:
            print "archiving file %s" % (ind)
            file.write(ind)
        file.close()
        return True

def dirEntries(new_version, subdir, *args):
    fileList = []
    for file in os.listdir(new_version):
        dirfile = os.path.join(new_version, 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)
        elif os.path.isdir(dirfile) and subdir:
            print "Accessing directory:", dirfile
            fileList.extend(dirEntries(dirfile, subdir, *args))
    return fileList
mk_zip_version(dirEntries('Directory', True), 'Archiv.zip')

Проблема в том что если в директориия есть пустой каталог он не записывается в архив, а надо.
Что не так?
I learned something today
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: [Решено] Python скрпит архивирования директории

Сообщение Alex2ndr »

ffldove писал(а):
22.01.2010 09:00
Есть скрипт

Код: Выделить всё

def mk_zip_version(fileList, new_version_zip):
        if os.path.exists(new_version_zip):
            shutil.rmtree(new_version_zip)
        file = zipfile.ZipFile(new_version_zip, 'w', zipfile.ZIP_DEFLATED)
        for ind in fileList:
            print "archiving file %s" % (ind)
            file.write(ind)
        file.close()
        return True

def dirEntries(new_version, subdir, *args):
    fileList = []
    for file in os.listdir(new_version):
        dirfile = os.path.join(new_version, 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)
        elif os.path.isdir(dirfile) and subdir:
            print "Accessing directory:", dirfile
            fileList.extend(dirEntries(dirfile, subdir, *args))
    return fileList
mk_zip_version(dirEntries('Directory', True), 'Archiv.zip')

Проблема в том что если в директориия есть пустой каталог он не записывается в архив, а надо.
Что не так?

А что вас удивляет? Функцию dirEntries вы сами писали или взяли откуда-то?(чем то она мне copytree из shutil напоминает) Никаких пустых каталогов и не будет - только файлы. Ведь вы в fileList что добавляете ( fileList.append(dirfile) ) - только файлы. Если же попадается каталог, то вызывается эта же функция и по прежнему добавляются только файлы. Непустые каталоги в архиве создаются только потому что они есть в путях файлов.
Спасибо сказали:
Аватара пользователя
ffldove
Сообщения: 480
Статус: Keep It Simple, Stupid
ОС: RFRemix 14

Re: [Решено] Python скрпит архивирования директории

Сообщение ffldove »

Alex2ndr писал(а):
22.01.2010 14:39
А что вас удивляет? Функцию dirEntries вы сами писали или взяли откуда-то?(чем то она мне copytree из shutil напоминает) Никаких пустых каталогов и не будет - только файлы. Ведь вы в fileList что добавляете ( fileList.append(dirfile) ) - только файлы. Если же попадается каталог, то вызывается эта же функция и по прежнему добавляются только файлы. Непустые каталоги в архиве создаются только потому что они есть в путях файлов.

Ясно, dirEntries нашел на просторах интернета. Видимо буду делать сначало tar потом zip, и кашернее и удобнее.
I learned something today
Спасибо сказали: