可能重复:
How do I zip the contents of a folder using python (version 2.5)?
假设我有一个目录:/home/user/files/
。这个目录有一堆文件:
/home/user/files/
-- test.py
-- config.py
我想在python中使用ZipFile
压缩此目录。我是否需要loop through the directory and add these files recursively,或者是否可以传递目录名称,ZipFile类会自动添加其下的所有内容?
最后,我想:
/home/user/files.zip (and inside my zip, I dont need to have a /files folder inside the zip:)
-- test.py
-- config.py
答案 0 :(得分:23)
请注意,这不包括空目录。如果需要,可以在网上找到解决方法;可能最好在我们最喜欢的归档程序中获取空目录的ZipInfo记录,以查看它们中的内容。
硬编码文件/路径以摆脱我的代码细节...
target_dir = '/tmp/zip_me_up'
zip = zipfile.ZipFile('/tmp/example.zip', 'w', zipfile.ZIP_DEFLATED)
rootlen = len(target_dir) + 1
for base, dirs, files in os.walk(target_dir):
for file in files:
fn = os.path.join(base, file)
zip.write(fn, fn[rootlen:])
答案 1 :(得分:6)
您可以尝试使用distutils包:
distutils.archive_util.make_zipfile(base_name, base_dir[, verbose=0, dry_run=0])
答案 2 :(得分:2)
答案 3 :(得分:1)
您可以使用subprocess
模块:
import subprocess
PIPE = subprocess.PIPE
pd = subprocess.Popen(['/usr/bin/zip', '-r', 'files', 'files'],
stdout=PIPE, stderr=PIPE)
stdout, stderr = pd.communicate()
代码未经过测试,假装只能在unix机器上运行,我不知道windows是否有类似的命令行实用程序。