Python os.listDir在某些文件夹上抛出“WindowsError:访问被拒绝:”

基本上我有一个Python 2.6编写的FileExplorer类。 它工作的很好,我可以浏览驱动器,文件夹等。但是,当我到达一个特定的文件夹'C:\ Documents and Settings /。*'*,os.listdir,我的脚本是基于,引发这个错误:

WindowsError:[错误5]访问被拒绝:'C:\ Documents and Settings /

这是为什么? 是因为这个文件夹是只读吗? 还是Windows正在保护和我的脚本不能访问?

这是有问题的代码(第3行):

def listChildDirs(self): list = [] for item in os.listdir(self.path): if item!=None and\ os.path.isdir(os.path.join(self.path, item)): print item list.append(item) #endif #endfor return list 

在Vista和更高版本中,C:\ Documents and Settings是一个连接点,而不是一个真实的目录。

你甚至不能做一个直的目标。

 C:\Windows\System32>dir "c:\Documents and Settings" Volume in drive C is OS Volume Serial Number is 762E-5F95 Directory of c:\Documents and Settings File Not Found 

可悲的是,使用os.path.isdir() ,它将返回True

 >>> import os >>> os.path.isdir(r'C:\Documents and Settings') True 

你可以看看在Windows中处理符号链接的这些答案。

  • 在Python中创建NTFS连接
  • 在Windows中的符号链接

这可能是目录访问权限设置,甚至是目录不存在。 您可以以管理员身份运行脚本(即访问所有内容)或尝试如下所示:

 def listChildDirs(self): list = [] if not os.path.isdir(self.path): print "%s is not a real directory!" % self.path return list try: for item in os.listdir(self.path): if item!=None and\ os.path.isdir(os.path.join(self.path, item)): print item list.append(item) #endif #endfor except WindowsError: print "Oops - we're not allowed to list %s" % self.path return list 

顺便问一下,你听说过os.walk吗? 看起来这可能是你试图达成的捷径。