Подтвердить что ты не робот

Извлечение содержимого zip файла в конкретный каталог в Python 2.7

Это код, который я использую в настоящее время для извлечения zip файла, который живет в том же рабочем каталоге, что и script. Как я могу указать другой каталог для извлечения?

Код, который я пытался, не извлекает, где я хочу.

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()
4b9b3361

Ответ 1

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

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:\\")

Ответ 2

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

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

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

Ответ 3

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

import zipfile
import contextlib


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

Ответ 4

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

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

Посмотрите docs. Он также поддерживает сжатие и перечисление содержимого.

Ответ 5

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

Ответ 6

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

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()