我在stackoverflow社区的帮助下编写了一个小脚本来解压归档文件。
我目前面临的一个奇怪的问题是,在解包之前,会下载大的zip文件(例如1GB或更大的)。本地到计算机,然后才开始解包。
我的剧本是:

#!/usr/bin/env python2.7
# coding=utf-8

import os
import sys


def unpack_zip(zip_file, to_dir):

    if sys.platform in ('darwin', 'linux2'):
        unpack = os.system('unzip %s -d %s' % (zip_file, to_dir))
        if unpack != 0:
            return False
        return to_dir

    elif 'win32' in sys.platform:
        import zipfile
        zf = zipfile.ZipFile(zip_file, "r")

        if zf.testzip() is not None:
            return False

        try:
            os.mkdir(to_dir)
        except OSError:
            pass

        def get_members(zip_archive):
            parts = []
            for name in zip_archive.namelist():
                if not name.endswith('/'):
                    parts.append(name.split('/')[:-1])
            prefix = os.path.commonprefix(parts) or ''
            if prefix:
                prefix = '/'.join(prefix) + '/'
            offset = len(prefix)
            for zipinfo in zip_archive.infolist():
                name = zipinfo.filename
                if len(name) > offset:
                    zipinfo.filename = name[offset:]
                    print "Extracting: %s" % name
                    yield zipinfo

        zf.extractall(to_dir, get_members(zf))
        zf.close()

        return to_dir

if __name__ == "__main__":
    archive = os.path.join(os.getcwd(), "zip_file.zip")
    unzip_to = os.path.join(os.getcwd(), "test_unzip")
    unpack_zip(archive, unzip_to)

如果您启动这个脚本,它将等待几分钟,然后才开始提取。重要提示:zip文件应该位于网络驱动器上。
我的目标是立即启动extracion进程(类似于linux/mac中的解压工具)。在没有第三方依赖的情况下(仅在zipfile和python的帮助下),这是否可能实现?
谢谢!

最佳答案

解包前您正在测试压缩文件。方法的docstring是清除的:“读取所有文件并检查crc。”
删除这一行,应立即开始解包。

08-05 23:55
查看更多