我在下面有一个简单的过程来列出文件夹的内容:

def some_process(self):


    dir3 = os.listdir('/Users/somepath/programming/somepathanother/Data_samples')
    for d in dir3:
        if os.path.isdir(d):
            print "DIR: " + d
        elif os.path.isfile(d):
            print "FILE: " + d


    print "PATH THREE:"
    print str(dir3)

    sys.exit(0)

数据样本文件夹的实际内容是:
目录1
目录2
目录3
目录4
文件.zip
另一个文件.zip
目录5
进程的输出不按预期工作。对于文件,它只打印:
FILE .DS_Store
没有其他内容(应该打印出file.zip和另一个file.zip)
我还意识到,如果我将resourcetest.py文件及其对应的ini文件复制到这个文件夹中并运行它,那么它确实可以看到
FILE: .DS_Store
FILE: resourcetest.ini
FILE: resourcetest.py

print str(dir3)的全部输出
PATH THREE:
['.DS_Store', 'dir1', 'dir2', 'dir3', 'dir4', 'resourcetest.ini','resourcetest.py', 'test.file', 'test.zip', 'dir5']

然后还应该将dir1 dir2 dir3 dir4打印为dir:“,但是这些都没有发生,我也不知道为什么,尽管奇怪的是,如果我从列出的文件夹中执行这段代码,它确实正确地显示了所有内容。
这是从MacOSX终端运行Python2.7的异常情况,还是我在这里遗漏了其他东西?我对listdir和isdir的使用的想法是错误的吗?

最佳答案

listdir只给出名称,而不是完整路径。您需要创建完整路径:

for d in dir3:
    path = os.path.join('/Users/somepath/programming/somepathanother/Data_samples', d)
    if os.path.isdir(path):
        ...

关于python - os.listdir和os.path.isdir混淆,isdir行为随机吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52246995/

10-12 21:20