Python 2.7.x zipfile:从网络驱动器解压缩速度慢 (Windows)
Python 2.7.x zipfile: slow unzip from network drive (Windows)
我在 Whosebug 社区的帮助下编写了一个小脚本来解压缩存档。
我目前面临的奇怪问题是解压前的大型 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
-方法的文档字符串很清楚:'Read all the files and check the CRC.'
删除此行,解包应该立即开始。
我在 Whosebug 社区的帮助下编写了一个小脚本来解压缩存档。
我目前面临的奇怪问题是解压前的大型 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
-方法的文档字符串很清楚:'Read all the files and check the CRC.'
删除此行,解包应该立即开始。