如何将zipfile中的文件复制到某个目录中?

时间:2016-07-02 12:46:49

标签: python zip

我在500个zipfiles中只需要一个子文件,路径是相同的,如:

120132.zip/A/B/C/target_file
212332.zip/A/B/C/target_file
....

如何将所有这些目标文件复制到一个目录中?将整个路径保留在新目录中将是最好的,我的意思是:

target_dir/
    120132/A/B/C/target_file
    212332/A/B/C/target_file
    ......

我尝试使用Python模块 zipfile shutil

但是,来自 shutil copyfile 将整个路径作为参数,但是当我尝试直接复制目标文件时,会引发filenotfind错误。当zipfile.Zip文件解压缩时,目标文件将可访问,但 copyfile 将失效。

如何正确有效地完成这项工作?

1 个答案:

答案 0 :(得分:3)

ZipFile.extract接受可选path指定它将提取文件的目录:

import os
import zipfile

zip_filepath = ['120132.zip', '212332.zip', ...]  # or glob.glob('...zip')
target_dir = '/path/to/target_dir'

for path in zip_filepath:
    with zipfile.ZipFile(path) as zf:
        dirname = os.path.join(
            target_dir, os.path.splitext(os.path.basename(path))[0]
        )
        zf.extract('A/B/C/target_file', path=dirname)