我正在尝试在Python 3.5中创建一个备份脚本,它将压缩指定文件夹的所有内容。这就是我现在正在做的事情:
import shutil
import datetime
import os
import os.path
import dropbox
INPUT_FOLDER = '~/Documents/db-backup-test/'
ARCHIVE_PATH = '~/Documents/tmp/'
ARCHIVE_FILE_NAME = "db-backup_iOS__"
def compress_folder(origem, destino):
try:
arq = shutil.make_archive(destino, 'zip', root_dir=origem, base_dir=origem)
except Exception as e:
print('\n\nAn error was found during compression:')
print(e)
timestamp = str(datetime.datetime.now())
input_path = os.path.expanduser(INPUT_FOLDER)
archive_path = os.path.expanduser(ARCHIVE_PATH + ARCHIVE_FILE_NAME + timestamp)
compress_folder(input_path, archive_path)
我很顺利,除了一件事:生成的zip存档通过复制完整的原始路径来提取其内容。我想要的是获取存档时文件夹的简单副本,其原始名称和相关路径的内容。
我正在寻找一个简单而简短的解决方案,不需要迭代文件夹内容。
shutil.make_archive()
是否可以实现,或者我需要深入了解其他模块,例如zipfile
?
答案 0 :(得分:0)
使用arcname参数控制zip文件中的名称/路径。
&myArray[3][2] - &myArray[0][0]
使用如下目录结构:
#!/usr/bin/env python2.7
import os
import zipfile
def zip(src, dst):
zf = zipfile.ZipFile("%s.zip" % (dst), "w", zipfile.ZIP_DEFLATED)
abs_src = os.path.abspath(src)
for dirname, subdirs, files in os.walk(src):
for filename in files:
absname = os.path.abspath(os.path.join(dirname, filename))
arcname = absname[len(abs_src) + 1:]
print 'zipping %s as %s' % (os.path.join(dirname, filename), arcname)
zf.write(absname, arcname)
zf.close()
zip("src", "dst")