0

テキスト ファイルのフォルダーを含む圧縮フォルダーをアップロードしていますが、圧縮されたフォルダーがディレクトリであることが検出されません。呼び出しで絶対パスを要求することと関係があるのではないかと思いますがos.path.isdir、それを実装する方法がわかりません。

            zipped = zipfile.ZipFile(request.FILES['content'])
            for libitem in zipped.namelist():
                if libitem.startswith('__MACOSX/'):
                    continue
                # If it's a directory, open it
                if os.path.isdir(libitem):
                    print "You have hit a directory in the zip folder -- we must open it before continuing"
                    for item in os.listdir(libitem):
4

2 に答える 2

0

アップロードしたファイルは単一の zip ファイルであり、他のファイルやディレクトリの単なるコンテナーです。すべての Pythonos.path関数は、ローカル ファイル システム上のファイルで動作します。os.pathつまり、またはos.listdir.

ZipFile残念ながら、エントリがファイルかディレクトリかをオブジェクトから判断することはできません。

書き直しまたは最初に抽出を行うコードは、次のようになります。

import tempfile

# Create a temporary directory into which we can extract zip contents.
tmpdir = tempfile.mkdtemp()
try:
    zipped = zipfile.ZipFile(request.FILES['content'])
    zipped.extractall(tmpdir)

    # Walk through the extracted directory structure doing what you
    # want with each file.
    for (dirpath, dirnames, filenames) in os.walk(tmpdir):
        # Look into subdirectories?
        for dirname in dirnames:
            full_dir_path = os.path.join(dirpath, dirname)
            # Do stuff in this directory
        for filename in filenames:
            full_file_path = os.path.join(dirpath, filename)
            # Do stuff with this file.
finally:
    # ... Clean up temporary diretory recursively here.
于 2013-02-01T00:59:13.620 に答える
0

通常、使用したいスクリプトを実行するときに、相対パスなどを処理するようにしますos.path

実際に解凍していないアイテムをZipfileから読み取っているように思えますが、なぜファイル/ディレクトリが存在すると予想しますか?

通常、私はprint os.getcwd()自分がどこにいるos.path.joinかを調べ、データ ディレクトリのルートと結合するために使用します。それがスクリプトを含むディレクトリと同じかどうかはわかりません。のようなものを使用しますscriptdir = os.path.dirname(os.path.abspath(__file__))

次のようなことをしなければならないと思います

libitempath = os.path.join(scriptdir, libitem)
if os.path.isdir(libitempath):
    ....

しかし、私には少し不明確なので、あなたが何をしているのか推測しています。

于 2013-02-01T00:24:11.557 に答える