Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的os.listdir返回相同的文件夹?_Python - Fatal编程技术网

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

Python 为什么我的os.listdir返回相同的文件夹?,python,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.pa

对不起,如果我的英语不好…
我试图通过以下方式获取我的目录列表:

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'},…]

您在每个循环迭代中都使用相同的“\u tmp\u attr”字典,因此您只需将相同的实例添加到\u tmp\u数据集合中,并在每个迭代中覆盖其内容

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

_tmp_attr = { }
您在每个循环迭代中使用相同的“\u tmp\u attr”字典,因此您只需将相同的实例添加到\u tmp\u数据集合中,并在每个迭代中覆盖其内容

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

_tmp_attr = { }

这里有一个对象引用问题。添加到列表中的_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})

这里有一个对象引用问题。添加到列表中的_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})

您可能还想看

您可能还想看

但是我认为第5行:_tmp_attr={“name”:““type”:“}是无用的,但是我认为第5行:_tmp_attr={“name”:“,“type”:“}是无用的
os.path.walk
是不推荐的。
os.path.walk
是不推荐的。