将zip文件内容解压缩到Python 2.7中的特定目录

lod*_*kkx 53 python windows compression

这是我目前用于提取与脚本位于同一当前工作目录中的zip文件的代码.如何指定要提取的其他目录?

我试过的代码并没有在我想要的地方提取它.

import zipfile

fh = open('test.zip', 'rb')
z = zipfile.ZipFile(fh)
for name in z.namelist():
    outfile = open(name, 'wb')
    outfile.write('C:\\'+z.read(name))
    outfile.close()
fh.close()
Run Code Online (Sandbox Code Playgroud)

sec*_*ike 106

我想你刚刚搞砸了.应该是类似以下内容:

import zipfile

fh = open('test.zip', 'rb')
z = zipfile.ZipFile(fh)
for name in z.namelist():
    outpath = "C:\\"
    z.extract(name, outpath)
fh.close()
Run Code Online (Sandbox Code Playgroud)

如果你只想提取所有文件:

import zipfile

with zipfile.ZipFile('test.zip', "r") as z:
    z.extractall("C:\\")
Run Code Online (Sandbox Code Playgroud)

对最新版本的Python使用pip install zipfile36

import zipfile36
Run Code Online (Sandbox Code Playgroud)


fia*_*jaf 12

我在这个帖子中尝试了其他答案,但对我来说最终的解决方案很简单:

zfile = zipfile.ZipFile('filename.zip')
zfile.extractall(optional_target_folder)
Run Code Online (Sandbox Code Playgroud)

查看extractall,但仅将其用于值得信赖的zip文件.

  • 我建议调用`zfile.close()`,就像在[ZipFile.close](https://docs.python.org/2/library/zipfile.html#zipfile.ZipFile.close)中所说的那样**您必须在退出程序之前调用close(),否则将不会写入基本记录.**. (2认同)

小智 5

添加到上述secretmike的答案中,支持python 2.6提取所有文件。

import zipfile
import contextlib


with contextlib.closing(zipfile.ZipFile('test.zip', "r")) as z:
   z.extractall("C:\\")
Run Code Online (Sandbox Code Playgroud)