os.path.isdir 在文件夹存在时返回假?

8 投票
2 回答
20757 浏览
提问于 2025-04-18 14:49

我有一段代码,用来检查一个文件夹是否存在。

def download(id, name, bar):
    cwd = os.getcwd()
    dir = os.path.join(cwd,bar)
    partial = os.path.join(cwd, id + ".partial")
    print os.path.isdir(dir)
    if(os.path.isdir(dir)):
        print "dir exists"
        dir_match_file(dir, bar)
    else:
        print dir

对于一个确实存在的文件夹,它却返回了“假”。这是输出结果:

False
/scratch/rists/djiao/Pancancer/RNA-seq/CESC/TCGA-BI-A0VS-01A-11R-A10U-07

当我在Python的交互式环境中输入os.path.isdir("/scratch/rists/djiao/Pancancer/RNA-seq/CESC/TCGA-BI-A0VS-01A-11R-A10U-07")时,它返回了“真”。

为什么当文件夹存在时,它却说是假的呢?

2 个回答

1

我在使用 "~" 来表示Ubuntu上的主目录时遇到了这个问题。通常情况下,使用 "~" 的路径是可以正常工作的,但有时候却不行。我不太明白为什么它并不总是有效。

在这种情况下,解决办法是把路径放在 os.path.expanduser 里,这样就能把 "~" 转换成主目录的绝对路径。

In [1]: import os

In [2]: os.path.isdir("~/Datasets")
Out[2]: True

In [2]: os.path.isdir("~/Datasets/cifar10")
Out[2]: False

In [2]: os.path.isdir(os.path.expanduser("~/Datasets/cifar10"))
Out[2]: True
12

download中的dir后面有空格,而在交互式会话中定义的dir后面没有空格。这个区别是通过打印repr(dir)发现的。

In [3]: os.path.isdir('/tmp')
Out[3]: True

In [4]: os.path.isdir('/tmp\n')
Out[4]: False

撰写回答