目录未在Python中识别

时间:2013-01-31 23:01:44

标签: python django zip

我正在上传一个包含文本文件夹的压缩文件夹,但它没有检测到压缩文件夹是一个目录。我认为这可能与在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):

2 个答案:

答案 0 :(得分: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):
    ....

但是我猜你在做什么,因为它对我来说有点不清楚。

答案 1 :(得分:0)

您上传的文件是一个zip文件,它只是其他文件和目录的容器。所有Python os.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.