Windows中os.path.join的不可预测结果

1 投票
4 回答
3005 浏览
提问于 2025-04-16 11:43

我想做的是把一些东西连接起来,形式是这样的:

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

**编辑:实际的代码是:

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

这里的self.cache_dir是通过configobj从一个文件中读取的(返回的是字符串),在这个特定的情况下是'\Documents and Settings\Administrator\creepy\cache'

第一部分是从配置文件中返回的,使用了configobj。第二部分是两个字符串的拼接,比如说:'file%s' % name

当我在Windows的控制台中使用安装好的Python解释器运行这个应用程序时,我得到了预期的结果,也就是:

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

但是当我把同样的应用程序和Python解释器(版本相同,都是2.6)打包成一个可执行文件,在Windows上运行这个应用时,结果却变成了:

C:\\path\\to\\folderfilename

有没有什么线索可以帮助我找出问题所在,或者是什么原因导致输出结果不一致呢?

4 个回答

0

你可以做三件事:

  1. 在你的原始字符串中使用双反斜杠,比如 'C:\\path\\to\\folder'

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

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

0

这个行为真让人意外。其实没有理由它会这样表现。

不过要小心,你可以把这一行改成下面这样。

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

注意这里的 r'' 是原始字符串,还有最后的 \

0

你的代码有问题。你需要把那些反斜杠加倍,或者使用原始字符串。

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

我不知道为什么在一个解释器里能正常工作,而在另一个里却不行,但你的代码现在这样写是无法正确解析的。奇怪的是,我本来以为会有不同的输出,比如:C:pathtofolder\filename

撰写回答