os.path.isdir() 不工作
os.path.isdir() is not working
即使我将目录路径传递给函数,os.path.isdir() 也会返回 false。我正在处理代码片段。该代码创建了一个名为 "arquivos" 的文件夹,以进行测试,只需在其中创建一些文件/文件夹即可。
import os
class Arquivos():
working_path = None
arquivos = dict()
def __init__(self, pasta = "arquivos" ):
directory = os.path.dirname(os.path.abspath(__file__))
directory = os.path.join(directory,pasta)
try:
if not os.path.exists(directory):
os.makedirs(directory)
except Exception as e:
print(e)
self.working_path = directory
def atualiza_arquivos(self):
"""Cria uma lista com os arquivos e pastas do diretório
de trabalho"""
_lista = os.listdir(self.working_path)
result = dict()
for arq in _lista:
""" bug ,era pra retornar True só quando
fossem pastas. """
caminho = os.path.join(self.working_path, arq)
result['pasta'] = os.path.isdir(caminho)
infos = os.stat(caminho)
result['ultima_mod'] = infos[8]
result['tam'] = infos[6]
self.arquivos[arq] = result
if __name__ == "__main__":
obj = Arquivos()
obj.atualiza_arquivos()
print(obj.arquivos)
您的 obj.arquivos
将拥有同一词典的副本(包含迭代的最后一个文件/目录的数据)。
这是因为 result
字典是在 外部 循环 (for arq in _lista:
) 中创建的,对于迭代的每个项目,您只是覆盖 result
值并在 self.arquivos
中添加对它的引用。
要更正您的问题,请为每个迭代项创建一个 result
实例,方法是将其移动到循环中。
部分片段:
# Rest of the code
_lista = os.listdir(self.working_path)
for arq in _lista:
result = dict()
# Rest of the code
os.path.isdir() 也会返回 false。我正在处理代码片段。该代码创建了一个名为 "arquivos" 的文件夹,以进行测试,只需在其中创建一些文件/文件夹即可。
import os
class Arquivos():
working_path = None
arquivos = dict()
def __init__(self, pasta = "arquivos" ):
directory = os.path.dirname(os.path.abspath(__file__))
directory = os.path.join(directory,pasta)
try:
if not os.path.exists(directory):
os.makedirs(directory)
except Exception as e:
print(e)
self.working_path = directory
def atualiza_arquivos(self):
"""Cria uma lista com os arquivos e pastas do diretório
de trabalho"""
_lista = os.listdir(self.working_path)
result = dict()
for arq in _lista:
""" bug ,era pra retornar True só quando
fossem pastas. """
caminho = os.path.join(self.working_path, arq)
result['pasta'] = os.path.isdir(caminho)
infos = os.stat(caminho)
result['ultima_mod'] = infos[8]
result['tam'] = infos[6]
self.arquivos[arq] = result
if __name__ == "__main__":
obj = Arquivos()
obj.atualiza_arquivos()
print(obj.arquivos)
您的 obj.arquivos
将拥有同一词典的副本(包含迭代的最后一个文件/目录的数据)。
这是因为 result
字典是在 外部 循环 (for arq in _lista:
) 中创建的,对于迭代的每个项目,您只是覆盖 result
值并在 self.arquivos
中添加对它的引用。
要更正您的问题,请为每个迭代项创建一个 result
实例,方法是将其移动到循环中。
部分片段:
# Rest of the code
_lista = os.listdir(self.working_path)
for arq in _lista:
result = dict()
# Rest of the code