os.path.isdir()不起作用

时间:2018-04-17 14:46:48

标签: python python-os

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)

1 个答案:

答案 0 :(得分:0)

您的obj.arquivos将包含相同词典的副本(包含最后一个文件/目录迭代的数据)。
这是因为result dict是在外部循环(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