Извлечение содержимого zip-файла в определенный каталог в Python 2.7 - PullRequest
52 голосов
/ 24 февраля 2012

Это код, который я сейчас использую для извлечения 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 ]

105 голосов
/ 24 февраля 2012

Я думаю, что вы только что перепутали здесь. Вероятно, должно быть что-то вроде следующего:

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
11 голосов
/ 04 февраля 2015

Я попробовал другие ответы в этой теме, но окончательное решение для меня было просто:

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

Посмотрите на extractall , но используйте его только с надежными ZIP-файлами.

4 голосов
/ 06 октября 2015

Добавление к ответу secretmike выше с поддержкой Python 2.6 для извлечения всех файлов.

import zipfile
import contextlib


with contextlib.closing(zipfile.ZipFile('test.zip', "r")) as z:
   z.extractall("C:\\")
3 голосов
/ 18 апреля 2017

Если вы просто хотите извлечь zip-файл из командной строки, используя Python (скажем, потому что у вас нет доступной команды unzip), то вы можете вызвать модуль zipfile напрямую

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

TakeПосмотрите на документы .Он также поддерживает сжатие и распечатку содержимого.

2 голосов
/ 24 февраля 2012

Питер де Риваз имеет точку в комментарии выше. Вы будете хотеть иметь каталог в вызове 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()
0 голосов
/ 01 октября 2015

Я изменил код, чтобы спросить у пользователя input имя файла и его путь, куда его нужно извлечь, чтобы пользователь мог лучше контролировать, куда положить извлеченную папку и какое имя следует присвоить извлеченной папке.

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...