распаковать файлы python в корневую папку

я хотел бы разархивировать все папки и файлы архива ниже корневой папки, у меня есть архив с именем abc.zip, который дает мне файлы как abc/xyz/ abc/123.jpg abc/xyz1/, я просто хочу извлечь xyz / , 123.jpg и xyz1/ в CWD

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

def unzip_artifact (локальный_каталог, путь_к_файлу):

fileName, ext = os.path.splitext( file_path )

if ext == ".zip":

Downloadfile = basename(fileName) + ext

    print 'unzipping file ' + Downloadfile

    try:
    zipfile.ZipFile(file_path).extractall(local_directory)

    except zipfile.error, e:
        print "Bad zipfile: %s" % (e)
    return

person sandeep    schedule 13.09.2013    source источник


Ответы (1)


Вы должны использовать более сложный (и, следовательно, более настраиваемый) способ распаковки. Вместо использования метода «extractall» вы должны извлечь каждый файл отдельно с помощью метода «extract». Затем вы сможете изменить каталог назначения, опуская подкаталоги архива.

Вот ваш код с необходимой вам модификацией:

def unzip_artifact( local_directory, file_path ):

    fileName, ext = os.path.splitext( file_path )
    if ext == ".zip":
        Downloadfile = fileName + ext
        print 'unzipping file ' + Downloadfile

        try:
            #zipfile.ZipFile(file_path).extractall(local_directory) # Old way
            # Open the zip
            with zipfile.ZipFile(file_path) as zf:
                # For each members of the archive
                for member in zf.infolist():
                    # If it's a directory, continue
                    if member.filename[-1] == '/': continue
                    # Else write its content to the root
                    with open(local_directory+'/'+os.path.basename(member.filename), "w") as outfile:
                        outfile.write(zf.read(member))

        except zipfile.error, e:
            print "Bad zipfile: %s" % (e)
        return
person Adrien LUCAS    schedule 25.06.2014