0

ルートフォルダーの下にあるアーカイブのすべてのフォルダーとファイルを解凍したいのですが、 abc.zip という名前のアーカイブがあり、 abc/xyz/ abc/123.jpg abc/xyz1/ としてファイルを提供します。 xyz を抽出したいだけです/ 、123.jpg、および CWD の xyz1/

以下のコードを使用してファイルを抽出しますが、リストのルート フォルダーを省略する方法について助けが必要です。

def unzip_artifact( local_directory, file_path ):

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
4

1 に答える 1

0

解凍するには、より複雑な (したがって、よりカスタマイズ可能な) 方法を使用する必要があります。「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
于 2014-06-25T12:10:53.303 に答える