Windows中os.path.join的不可预测结果
我想做的是把一些东西连接起来,形式是这样的:
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
你可以做三件事:
在你的原始字符串中使用双反斜杠,比如 'C:\\path\\to\\folder'
使用原始字符串,写成 r'C:\path\to\folder'
使用正斜杠,写成 '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
。