os.path.isdir 对以点结尾的目录返回 false
在Windows 7上,使用的是python 2.6.6和2.7版本。
创建了一个目录,路径是'c:\1\test.'。
然后尝试检查这个'c:\1\test.'是文件还是目录,但发现它既不是文件也不是目录:
>>> os.listdir('c:/1')
['test.']
>>> os.path.isdir('c:/1')
True
>>> os.path.exists('c:/1/test.')
False
>>> os.path.isdir('c:/1/test.')
False
>>> os.path.isfile('c:/1/test.')
False
为什么这个以点(.)结尾的目录在文件系统中完全不被识别?不过我可以通过os.listdir来获取到它。
2 个回答
0
你可以用两个反斜杠(\\)来处理路径中的点(.),这是一个大家都知道的问题,因为文件名或路径中使用了特殊字符。
path = 'c:/1/test\\.'
6
正如评论中所提到的,在Windows系统中,文件名如果以点号结尾、前后有空格,或者是像“aux”这样的特殊名称,就不能通过资源管理器或大多数编程语言正常访问。
如果你想通过Python(或者其他语言)访问像“test.”这样的目录,可以在路径前加上\\?\
,比如:
>>> os.path.isdir(r"\\?\c:\1\test.")
True
需要注意的是,当使用\\?\
路径时,“..”和“.”的用法会有所不同——Windows会尝试访问一个实际存在的文件或目录,而不是像平常那样表示上级目录或当前目录。