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'},...]
答案 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