Извлечение содержимого 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()
Ответы
Ответ 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()