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