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

时间:2012-02-24 13:56:12

标签: 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()

6 个答案:

答案 0 :(得分:104)

我觉得你刚刚搞砸了。可能应该是以下内容:

import zipfile

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

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

import zipfile

with zipfile.ZipFile('test.zip', "r") as z:
    z.extractall("C:\\")
  

将pip install zipfile36用于最新版本的Python

import zipfile36

答案 1 :(得分:11)

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

zfile = zipfile.ZipFile('filename.zip')
zfile.extractall(optional_target_folder)

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

答案 2 :(得分:4)

在上面添加了secretmike的答案,支持python 2.6以提取所有文件。

import zipfile
import contextlib


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

答案 3 :(得分:3)

如果您只想使用Python从命令行中提取zip文件(比如因为您没有提供unzip命令),那么您可以直接调用zipfile模块

python -m zipfile -e monty.zip target-dir/

看看docs。它还支持压缩和列出内容。

答案 4 :(得分:2)

Peter de Rivaz在上述评论中有一点意见。您将要在open()的调用中拥有该目录。 你会想做这样的事情:

import zipfile
import os

os.mkdir('outdir')
fh = open('test.zip','rb')
z = zipfile.ZipFile(fh)
for name in z.namelist():
    outfile = open('outdir'+'/'+name, 'wb')
    outfile.write()
    outfile.close()
fh.close()

答案 5 :(得分:0)

我修改了代码以询问用户输入 文件名及其需要提取的路径,因此用户将会'更多地控制提取文件夹的放置位置以及应该为解压缩的文件夹分配的名称。

import zipfile

#picking zip file from the directory
ZipFileName = raw_input("Enter full path to zip file:")  
fh = open( ZipFileName , 'rb')
z = zipfile.ZipFile(fh)

#assigning a name to the extracted zip folder
DestZipFolderName = raw_input("Assign destination folder a name: ")
DestPathName = raw_input("Enter destination directory: ")
DestPath = DestPathName + "\\" + DestZipFolderName

for name in z.namelist():   
    outpath = DestPath
    z.extract(name, outpath)
fh.close()