Как только у меня есть все файлы, которые мне нужны в определенной папке, я бы хотел, чтобы мой скрипт python застегивал содержимое папки.Как поместить содержимое папки с помощью python (версия 2.5)?
Возможно ли это?
И как я мог это сделать?
Как только у меня есть все файлы, которые мне нужны в определенной папке, я бы хотел, чтобы мой скрипт python застегивал содержимое папки.Как поместить содержимое папки с помощью python (версия 2.5)?
Возможно ли это?
И как я мог это сделать?
Адаптированная версия the script является:
#!/usr/bin/env python
from __future__ import with_statement
from contextlib import closing
from zipfile import ZipFile, ZIP_DEFLATED
import os
def zipdir(basedir, archivename):
assert os.path.isdir(basedir)
with closing(ZipFile(archivename, "w", ZIP_DEFLATED)) as z:
for root, dirs, files in os.walk(basedir):
#NOTE: ignore empty directories
for fn in files:
absfn = os.path.join(root, fn)
zfn = absfn[len(basedir)+len(os.sep):] #XXX: relative path
z.write(absfn, zfn)
if __name__ == '__main__':
import sys
basedir = sys.argv[1]
archivename = sys.argv[2]
zipdir(basedir, archivename)
Пример:
C:\zipdir> python -mzipdir c:\tmp\test test.zip
Это создает 'C:\zipdir\test.zip'
архив с содержимым каталога 'c:\tmp\test'
.
`ZFN = absfn [Len (имя_базовой_папки) + Len (os.sep):] `почему не` absbasedir = os.path.abspath (basedir); os.path.relpath (absfn, absbasedir) `? Кроме того, lengthi и os.sep можно рассматривать как константу, поэтому она должна находиться за пределами двух циклов. – n611x007 2013-08-16 13:11:49
Вот рекурсивную версию
def zipfolder(path, relname, archive):
paths = os.listdir(path)
for p in paths:
p1 = os.path.join(path, p)
p2 = os.path.join(relname, p)
if os.path.isdir(p1):
zipfolder(p1, p2, archive)
else:
archive.write(p1, p2)
def create_zip(path, relname, archname):
archive = zipfile.ZipFile(archname, "w", zipfile.ZIP_DEFLATED)
if os.path.isdir(path):
zipfolder(path, relname, archive)
else:
archive.write(path, relname)
archive.close()
На python 2.7 вы можете использовать: shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]]).
base_name имя архива минус расширение
формат формат архива
ROOT_DIR каталог сжать.
Например
shutil.make_archive(target_file, format="bztar", root_dir=compress_me)
ответ, для современного Python, [здесь] (http://stackoverflow.com/q/1855095/541136) – 2017-03-14 19:08:00