2009-07-17 34 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]你實際上是在說使用字符串的第一,第二和第三個字符。