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

通常在运行您想要使用的脚本时使事情处理相对路径等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 回答
0

您上传的文件是一个 zip 文件,它只是其他文件和目录的容器。所有 Pythonos.path函数都对本地文件系统上的文件进行操作,这意味着您必须先提取 zip 的内容,然后才能使用os.pathos.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 回答