os.path.expanduser无法编码反斜杠?

时间:2013-04-22 15:24:58

标签: python windows

在Python脚本(在2.7中执行)中,第二个语句返回false,尽管该目录存在:

from os import path
path.exists( path.expanduser('~') )

我认为这是一个反斜杠问题,因为使用path.exists(...)/的“手动编码”主目录的\\会按预期返回true。

这个问题似乎有点特定于我的机器,因为相同的脚本在其他计算机上运行正常(也运行Windows)。

导致这种行为的原因是什么?如何在不破解脚本的情况下修复它(在大多数Windows机器上运行正常)?

更新

问题是由path.expanduser('~')在我的系统上用引号(")包装路径引起的,而不是在其他系统上引起的。

基本问题仍然存在:为什么?

是否可以在我的机器上更改此行为而无需更改脚本(这不是由我维护并且适用于其他所有人)?

2 个答案:

答案 0 :(得分:2)

查看ntpath.py的源代码,expanduser()函数首先尝试按顺序返回环境变量HOME然后USERPROFILE,最后返回到复合HOMEDRIVEHOMEPATH,所以我猜你在其中一个环境变量上设置了引号。

答案 1 :(得分:0)

from os import path
path.exists( path.abspath(path.expanduser('~')) )

作品? (尚未测试但应替换\/问题)

引用来自 path.exists()

上的Python文档
  

如果path指的是现有路径,则返回True。返回False   破碎的象征性联系。在某些平台上,此功能可能会返回   如果未授予权限以执行os.stat(),则返回false   请求的文件,即使路径实际存在。