Python: Получение файлов в архив без каталога?

Я изучаю python уже около 3 недель, и сейчас я пытаюсь написать немного script для сортировки файлов (около 10.000) по ключевым словам и дате, появляющейся в имени файла. Файлы перед указанной датой должны быть добавлены в архив. Сортировка отлично работает, но не архивирование

Он создает архив - имя прекрасное, но в архиве это полный путь к файлам. Если я его открываю, он выглядит так: folder1 -> folder2 -> folder3 -> files.

Как я могу изменить его так, чтобы архив содержал только файлы, а не всю структуру?

Ниже приведен фрагмент с моей zip-функцией, node - это путь, где файлы были до сортировки, folder - это вложенная папка с файлами, отсортированными по ключевому слову в имени, items - это папки с файлами отсортировано по дате.

Я использую Python 2.6

def ZipFolder(node, zipdate):
    xynode = node + '/xy'
    yznode = node + '/yz'
    for folder in [xynode,yznode]:
        items = os.listdir(folder)
        for item in items:
            itemdate = re.findall('(?<=_)\d\d\d\d-\d\d', item)
            print item
            if itemdate[0] <= zipdate:
                arcname = str(item) + '.zip'
                x = zipfile.ZipFile(folder + '/' + arcname, mode='w', compression = zipfile.ZIP_DEFLATED)
                files = os.listdir(folder + '/' + item)
                for f in files:
                    x.write(folder + '/' + item + '/' + f)
                    print 'writing ' + str(folder + '/' + item + '/' + f) + ' in ' + str(item)
                x.close()
                shutil.rmtree(folder + '/' + item)
    return

Я также открыт для любых предложений и улучшений.

Ответ 1

Из справки (zipfile):

 |  write(self, filename, arcname=None, compress_type=None)
 |      Put the bytes from filename into the archive under the name
 |      arcname.

Поэтому попробуйте изменить вызов write() с помощью:

x.write(folder + '/' + item + '/' + f, arcname = f)

О вашем коде, мне кажется, это достаточно хорошо, особенно для 3-недельного питониста, хотя несколько комментариев были бы приветствованы; -)