使用 .encode('string-escape') 方法处理字符串时出现问题



我正在Windows机器上使用python中包含目录路径的变量,因此需要将字符串单词转换为原始字符串(删除转义序列)。当我使用 os.getcwd() 函数并使用方法 .encode('string-escape')进行转换时,一切都很好,但是一旦我尝试对硬编码字符串执行相同的操作,它就不起作用。这尤其令人困惑,因为两个对象属于同一类型(字符串),因此应该以完全相同的方式运行。我的代码是:

import os
dir1 = os.getcwd()
type1 = type(dir1)
print type1
print dir1.encode('string-escape')
print "nn"
dir2 = "C:UsersStaMDesktopbrbatest1"
type2 = type(dir2)
print type2
print dir2.encode('string-escape')

我的输出是:

<type 'str'>
C:\Users\StaM\Desktop\brba\test1

<type 'str'>
C:\Users\StaM\Desktopx08rbatest1

如您所见,这两个对象是相同的类型,但在处理转义序列时的行为是不同的。关于为什么会发生这种情况以及如何使其正常工作的任何想法?所有解释/建议/解决方案将不胜感激,我真的很想了解这里发生了什么。谢谢

请注意:这个问题是关于 .encode() 方法而不是 'r' 标志...在这里对原始字符串使用"r"标志不是一个选项,因为我正在将包含目录路径的变量传递到我的程序中,以构造一个更大的字符串来表示 DOS 命令。

此行为的原因是 os.getcwd() 函数返回一个预先格式化的字符串,其中包含双"\",即使前缀为转义字符也是如此。而 .encode() 方法只会在它后面的字符不是转义字符时才附加第二个"\"。

>>> import os
>>> dir = os.getcwd()
>>> print "%r" %dir
'C:\Users\StaM\Desktop\brba\test1'

这里的解决方案是使用字典来定义所有可能的转义字符,然后使用循环在相关字符串中查找这些字符,并在任何转义字符之前直接附加辅助"\"。这应该在使用 .encode() 方法之前完成。繁荣!

最新更新