Python 2.7.1:os.path.isdir()的输出不一致

时间:2011-02-23 21:18:20

标签: python

我正在构建一个Python ISO生成应用程序,我从os.path.isdir()获得了一些奇怪的输出。我正在使用Python 2.7.1运行Arch Linux。

我有以下文件夹结构:

/家庭/安德鲁/ create_iso / Raw_Materials /
/家庭/安德鲁/ create_iso / Raw_Materials / test_cd /

[andrew@Cydonia Raw_Materials]$ ls -l total 4 drwxr-xr-x 3 andrew andrew 4096 Feb 23 10:20 test_cd

如您所见,test_cd /是一个普通的Linux文件夹。但是,当我运行os.path.isdir()时,我会得到不同的结果,这取决于它是否是我的for循环的一部分或者我是否对它进行了硬编码。

import os
>>>for folders in os.listdir('/home/andrew/create_iso/Raw_Materials/'):
...  os.path.isdir(folders)
False

>>>os.path.isdir('/home/andrew/create_iso/Raw_Materials/test_cd')
True

我想也许我从os.listdir()获得的输出中有一些奇怪的东西,但这似乎也可以看出来:

>>>os.listdir('/home/andrew/create_iso/Raw_Materials/')
['test_cd']

任何想法为什么它对这些案件的处理方式不同?提前谢谢。

3 个答案:

答案 0 :(得分:5)

'test_cd'本身不是目录。您需要执行os.path.join以获取目录的绝对路径,然后在其上调用isdir

答案 1 :(得分:4)

您需要将文件夹附加到'/ home / andrew'...路径。

folder_path = '/home/andrew/create_iso/Raw_Materials/'
for folder in os.listdir(folder_path):
    os.path.isdir(os.path.join(folder_path, folder))

答案 2 :(得分:1)

它正在当前目录中查找test_cd,而不是在您使用os.listdir阅读的目录中。当前目录可能与包含脚本的目录相同,并且可能不包含名为test_cd的项目。当找不到文件时,os.path.isdir()会返回False,当文件存在但不是目录时,以及。正如其他人所说,使用os.path.join()来构建完整路径。