2016-02-02 1 views
0

Словарь «d» состоит только из последних итерированных вложенных папок и значений, когда я хочу добавить все папки. Я не понимаю, почему мой словарь начинает обновление из пустого словаря после изменения папки.Python, итерация по каталогам и обновлению словаря

import os 
from os.path import join 

for (dirname, dirs, files) in os.walk('.'): 
    d = dict() 
    for filename in files: 
     if filename.endswith('.txt') : 
      value_thefile = os.path.join(dirname,filename) 
      key_size = os.path.getsize(value_thefile) 
      d.update({key_size:value_thefile}) 
print d 
+4

Потому что вы назначаете его пустой словарь на каждой итерации внешнего цикла .. .? Вот что делает 'd = dict()'. – jpmc26

+0

Как указывает @ jpmc26, попробуйте поместить инструкцию 'd = dict()' перед первым циклом. – tomasyany

+0

Ох ... Спасибо! – g1st

ответ

0

Словарь d продолжает получать набор на новый пустой Dict для каждой итерации внешнего цикла for. т.е. он продолжает получать повторно инициализируется {}:

for (dirname, dirs, files) in os.walk('.'): 
    d = dict() # this makes d == {} for each iteration of os.walk('.') 
    for filename in files: 
     ... 

Вместо этого, отформатируйте ее вне петли, как это:

d = dict() # this makes d == {} only at the start 
for (dirname, dirs, files) in os.walk('.'): 
    for filename in files: 
     ... # rest of your code