Arhn - архитектура программирования

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

  • Следует ли переместить «C:\\»+ в вызов открытия вместо вызова записи? 24.02.2012

Ответы:


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

Используйте pip install zipfile36 для последних версий Python.

import zipfile36
24.02.2012
  • ZipFile не имеет атрибута __exit__, поэтому я не знаю, как будет работать ваш оператор with. 31.08.2015
  • Если вы создаете экземпляр ZipFile, у него есть метод __exit__. Я только что еще раз попробовал пример (python 2.7), и он работает, как написано. 02.09.2015
  • Python 2.6 по какой-то причине имеет другую реализацию ZipFile. 02.09.2015
  • Да, глядя на документы (docs.python.org/2/library/zipfile.html) он говорит, что ZipFile поддерживает использование в качестве менеджера контекста только с python 2.7 - я не пробовал с 2.6, так как в этом случае в вопросе указан python 2.7 03.09.2015

  • 2

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

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

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

    04.02.2015
  • Я также предлагаю вызвать zfile.close(), как указано в ZipFile.close что вы должны вызвать функцию close() перед выходом из программы, иначе основные записи не будут записаны.. 11.04.2016

  • 3

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

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

    4

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

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

    Взгляните на документы. Он также поддерживает сжатие и отображение содержимого.

    18.04.2017

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

    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()
    
    01.10.2015
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..