为什么我的os.listdir返回相同的文件夹?

时间:2010-11-04 05:47:28

标签: python

索里,如果我的英语不好...... 我试图以这种方式获得我的目录列表:

import os, os.path  

_path = "/opt/local"#this because i use mac
_dir_path = os.listdir(_path)
_tmp_attr = {"name":"","type":""}
_tmp_data =[]

for _dir_name in _dir_path:
   _tmp_attr["name"] = _dir_name
   if os.path.isdir(_path+'/'+_dir_name):
     _tmp_attr["type"] = "Dictionary"
   _tmp_data.append(_tmp_attr)
print _tmp_data  

但它只打印最后一个目录
    [{'type':'Dictionary','name':'www'},{'type':'Dictionary','name':'www'},...]

3 个答案:

答案 0 :(得分:1)

您在每次循环迭代中重复使用相同的“_tmp_attr”字典,因此您只需将相同的实例重新添加到_tmp_data集合并在每次迭代中覆盖其内容。

您需要在每次迭代中初始化一个新词典:

_tmp_attr = { }

答案 1 :(得分:1)

这里有一个对象引用问题。您要添加到列表中的_tmp_attr实际上是同一个对象。循环的每次迭代都只是更新它。您需要为每个迭代创建一个新的_tmp_attr对象,以使列表元素具有唯一性。当循环通过时,您只需在列表中将多个引用留给同一对象。 在循环中执行此操作可能会有所帮助:

type = ""
if os.path.isdir(os.path.join(_path,_dir_name)):
    type = "Dictionary"
_tmp_data.append({"type":type,"name":_dir_name})

答案 2 :(得分:1)

您可能还想查看os.walk