0

Pythonでファイルを解凍しようとしています。私は次の関数を使用しています:

def unzip(source_filename, dest_dir):
    zf = zipfile.ZipFile(source_filename)
    for member in zf.infolist():
        # Path traversal defense copied from
        # http://hg.python.org/cpython/file/tip/Lib/http/server.py#l789
        words = filter(None, member.filename.split('/'))
        path = dest_dir
        for word in words[:-1]:
            drive, word = os.path.splitdrive(word)
            head, word = os.path.split(word)
            if word in (os.curdir, os.pardir): continue
            path = os.path.join(path, word)
        zf.extract(member, path)

「gui」というディレクトリで.zipを解凍すると、次のエラーが発生します。

Traceback (most recent call last):
  File "MCManager.py", line 137, in add
    unzip(addedFilepath, dirUnzipped)
  File "MCManager.py", line 19, in unzip
    zf.extract(member, path)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/zipfile.py", line 928, in extract
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/zipfile.py", line 962, in _extract_member
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/os.py", line 157, in makedirs
OSError: [Errno 20] Not a directory: '/Users/student/Library/Application Support/minecraft/temp/unzipped/gui/gui'

これはZipFile()の問題ですか?

4

1 に答える 1

0

メソッドのドキュメントを確認すると、メソッドが変数を介して受け取る変数は、反復するzipファイルの内容を抽出するdirへのパスである必要があるextractことがわかります。pathdest_dir

あなたが質問で述べたように、guiはファイルであり、ディレクトリではありません。そして完全に正直に言うと、あなたは

「gui(...)」というファイルで.zipを解凍する場合

あまり意味がありません。

さらに、必要os.mkdirに応じてディレクトリを作成できるように、メソッドを確認することをお勧めします。

于 2012-10-15T13:54:41.770 に答える