2011-08-10 3 views
10

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

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

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

Ниже приведен фрагмент кода с моей молнии функции, 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 

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

ответ

13

С помощью (ZipFile):

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

Так попробуйте изменить запись() вызов с:

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

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

+0

Не комментарии, а docstring. Объясните, что делает функция и для чего она полезна, а не как она работает, и docstring для нее наиболее полезна. –

+0

Удивительно, что это работает, THX для быстрой помощи. – rny

+0

@Jan Hudec: с вы имеете в виду строка документации STH так: Защиту ZipFolder (узел, zipdate): "" "застегивает файлы старше 'zipdate' в подпапках" узел" "" – rny

Смежные вопросы