我在Windows机器上使用python中包含目录路径的变量,因此需要将字符串litterals转换为原始字符串(删除转义序列)。当我使用os.getcwd()函数并使用方法.encode(' string-escape')进行转换时,一切都很好,但是一旦我尝试使用硬编码字符串执行相同操作,它就不会工作。这尤其令人困惑,因为两个对象具有相同的类型(字符串),因此应该以完全相同的方式运行。 我的代码是:
import os
dir1 = os.getcwd()
type1 = type(dir1)
print type1
print dir1.encode('string-escape')
print "\n\n"
dir2 = "C:\Users\StaM\Desktop\brba\test1"
type2 = type(dir2)
print type2
print dir2.encode('string-escape')
我的输出是:
<type 'str'>
C:\\Users\\StaM\\Desktop\\brba\\test1
<type 'str'>
C:\\Users\\StaM\\Desktop\x08rba\test1
正如您所看到的,两个对象的类型相同,但在处理转义序列时行为也不同。有关为什么会发生这种情况以及如何使其正常工作的任何想法?所有解释/建议/解决方案都将受到高度赞赏,我真的很想了解这里发生了什么。日Thnx
请注意:这个问题与.encode()方法有关,而不是&#39; r&#39; flag ...使用&#39; r&#39;原始字符串的标志不是一个选项,因为我将包含目录路径的变量传递给我的程序,以构造一个更大的字符串来表示DOS命令。
答案 0 :(得分:0)
这种行为的原因是os.getcwd()函数返回一个预先格式化的字符串,包括double&#34; \&#34;即使预先固定到逃脱角色。虽然.encode()方法只会附加第二个&#34; \&#34;如果跟随它的字符不是转义字符。
>>> import os
>>> dir = os.getcwd()
>>> print "%r" %dir
'C:\\Users\\StaM\\Desktop\\brba\\test1'
这里的解决方案是使用字典来定义所有可能的转义字符,然后使用循环在相关字符串中找到这些字符并附加辅助字符&#34; \&#34;直接在任何转义字符之前。这应该在使用.encode()方法之前完成。 BOOM!