Python 2.7.x 压缩文件 : slow unzip from network drive (Windows)

标签 python windows python-2.7 unzip python-zipfile

我在 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 文件应位于网络驱动器中。

我的目标是立即启动提取过程(类似于 Linux/Mac 中的解压缩工具)。 没有第 3 方依赖项(仅在 ZipFile 和 Python 的帮助下)是否有可能实现?

最佳答案

您正在解压缩之前测试您的压缩文件。 testzip 方法的文档字符串很明确:“读取所有文件并检查 CRC。” 删除这一行,解包应该立即开始。

关于Python 2.7.x 压缩文件 : slow unzip from network drive (Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34243799/

相关文章:

windows - 安装

javascript - vs代码侧边栏树文件夹结构不起作用

Python 无法安装模块 "spacepy"

Python从文件中读取列表

python - 什么可以阻止工作(当 "opened with"Python 时)Python 应用程序通过双击启动?

python - 如何在 matplotlib 中为不等间隔的 bin 绘制具有相同 bin 宽度的直方图

Python 3.4 输入?

mysql - 在 MS Windows 7 中从 Cmd.exe 运行 MySql 脚本

python - 如何使用python计算字符串中某个单词的所有出现次数

python - 如何根据两列的值删除重复行?