来自windows中os.path.join的不可预知的结果

时间:2011-02-13 02:43:09

标签: python windows-xp pygtk

所以我要做的是以

的形式加入一些东西
os.path.join('C:\path\to\folder', 'filename'). 

**编辑: 实际代码是:

filename = 'creepy_%s.pcl' % identifier
file = open(os.path.join(self.cache_dir, filename), 'w')

其中使用configobj从文件中读取self.cache_dir(返回字符串),在特定情况下为'\ Documents and Settings \ Administrator \ creepy \ cache'

使用configobj从配置文件返回第一部分。第二个是2个字符串的串联,例如:'file%s'%name

当我使用安装的python解释器在Windows中通过控制台运行应用程序时,我得到了预期的结果

C:\\path\\to\\folder\\filename 

当我在Windows中的可执行文件中捆绑相同的应用程序和python解释器(相同版本,2.6)并运行应用程序时,结果是

C:\\path\\to\\folderfilename

关于可能出现什么问题的任何线索,或者什么会导致输出中的这种不一致?

4 个答案:

答案 0 :(得分:0)

您的代码格式错误。您需要将这些反斜杠加倍或使用原始字符串。

os.path.join('C:\\path\\to\\folder', 'filename'). 

我不知道为什么它在一个解释器中起作用而在另一个解释器中不起作用,但是你的代码将不会被正确解释。奇怪的是我预期会有不同的输出,即:C:pathtofolder\filename

答案 1 :(得分:0)

这是令人惊讶的行为。它没有理由以这种方式行事。

请注意,您可以将线路更改为以下内容。

os.path.join(r'C:\path\to\folder\', 'filename'). 

请注意r''原始字符串和最终\

答案 2 :(得分:0)

你可以做三件事:

  1. 在原始字符串中使用双斜线,'C:\\ path \\到\\ folder'

  2. 使用原始字符串,r'C:\ path \ to \ folder'

  3. 使用正斜杠,'C:/ path / to / folder'

答案 3 :(得分:0)

我昨天弄清楚了。像往常一样,当事情看起来很奇怪时,解释非常简单,大多数时候都会让你变得愚蠢。

总而言之,以前的一些装置中都有残羹剩饭。捆绑的解释器从那里加载模块,但是当我从终端运行python脚本时,加载了当前目录中的模块(更新版本)。因此“不可预测”的结果。