在Python中压缩文件的更好方法(用单个命令压缩整个目录)?
可能重复的问题:
我该如何用Python(版本2.5)压缩一个文件夹的内容?
假设我有一个文件夹:/home/user/files/
。这个文件夹里有很多文件:
/home/user/files/
-- test.py
-- config.py
我想用Python中的ZipFile
来压缩这个文件夹。我需要逐个遍历这个文件夹,把这些文件一个个加进去吗,还是说可以直接传入文件夹的名字,让ZipFile
类自动把下面的所有东西都加进去呢?
最后,我希望得到:
/home/user/files.zip (and inside my zip, I dont need to have a /files folder inside the zip:)
-- test.py
-- config.py
4 个回答
7
你可以试试使用distutils这个包:
distutils.archive_util.make_zipfile(base_name, base_dir[, verbose=0, dry_run=0])
24
请注意,这里不包括空文件夹。如果需要空文件夹的话,网上有一些解决办法;最好还是查看我们喜欢的压缩软件中的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
你可以使用 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是否有类似的命令行工具。