Python: получение файлов в архив без каталога?
Я изучаю python около 3 недель, и в настоящее время я пытаюсь написать небольшой скрипт для сортировки файлов (около 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('(?<=_)dddd-dd', 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-недельного питониста, хотя несколько комментариев были бы приветствованы ; -)