2009-07-17 37 views
0

我建立使用Django每个用户的文件浏览/载应用程序,当我运行这个功能Python的值拆包错误


def walkdeep(request, path): 
    path, dirs, files = walktoo('/home/damon/walktemp/%s' % path) 
    return render_to_response('walk.html', { 
     'path' : path[0], 
     'dirs' : path[1], 
     'files' : path[2], 
    }, context_instance=RequestContext(request)) 

def walktoo(dir): 
    for path, dirs, files in os.walk(dir): 
     yield path, dirs, files 
    print path, dirs, files 

我得到这个错误:

need more than 1 value to unpack

而且,我知道这是一个愚蠢的方式来做到这一点,任何意见将不胜感激。

编辑:

这实际上是对我而言很无聊的,我完全忘了os.listdir(DIR),这是我的目的,一个更合理的功能。如果您使用选定的答案,它会清除我遇到的上述问题,但不会得到我想要的结果。

+0

错误来自哪条线? – RichieHindle 2009-07-17 18:34:52

回答

7
path, dirs, files = walktoo('/home/damon/walktemp/%s' % path) 

在这一行,你希望walktoo返回三个值,然后将它们的元组进行解压缩到pathdirsfiles。但是,您的walktoo函数是一个生成器对象:调用walktoo()会生成一个值,即生成器。您必须在生成器上调用next()(或者通过对其进行某种迭代来隐式调用它)以获得您实际需要的内容,即它生成的三元组。

我不完全清楚你想要做什么 - 你的walkdeep()函数是这样写的,只想使用walktoo()返回的第一个值。你的意思是做这样的事吗?

for path, dirs, files in walktoo(...): 
    # do something 
+0

我想要做的是创建1级文件树(根目录,文件夹内部和文件),并在最后将这些值传递给模板。 – blackrobot 2009-07-17 19:00:20

1

根据您对Adam Rosenfield的评论,这是另一种获取os.walk(dir)图层的方法。

path, dirs, files = [_ for _ in os.walk('/home/damon/walktemp/%s' % path)][0] 

这是作为一种替代你walktoo(DIR)功能可按。

此外,请确保您的第二个参数render_to_response使用您所创建的变量:

{'path' : path, 
'dirs' : dirs, 
'files' : files,} 

path是一个字符串,所以说path[0] ... path[1] ... path[2]你实际上是在说使用字符串的第一,第二和第三个字符。