it-swarm.com.ru

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

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

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

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
104
secretmike

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

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

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

11
fiatjaf

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

import zipfile
import contextlib


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

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

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

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

3
Peter Gibson

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

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

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