Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中无法识别目录_Python_Django_Zip - Fatal编程技术网

在Python中无法识别目录

在Python中无法识别目录,python,django,zip,Python,Django,Zip,我正在上传一个压缩文件夹,其中包含一个文本文件文件夹,但它没有检测到压缩的文件夹是一个目录。我认为这可能与在os.path.isdir调用中需要一个绝对路径有关,但似乎不知道如何实现它 zipped = zipfile.ZipFile(request.FILES['content']) for libitem in zipped.namelist(): if libitem.startswith('__MACOSX/

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

通常是为了在运行脚本时处理相对路径等,您需要使用
os.path

在我看来,您正在从Zipfile读取您实际上没有解压缩的项目,那么为什么您希望文件/dirs存在呢

通常我会
print os.getcwd()
来找出我的位置,并使用
os.path.join
来连接数据目录的根目录,无论它是否与包含脚本的目录相同,我都不知道。使用类似于
scriptdir=os.path.dirname(os.path.abspath(_文件__))

我想你应该做些类似的事情

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

但是我猜你在做什么,因为我不太清楚。

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