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

2024-04-27 03:06:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在windows机器上使用包含python目录路径的变量,因此需要将字符串literals转换为原始字符串(删除转义序列)。我用电脑的时候一切都很好操作系统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()方法而不是“r”标志。。。在这里,对原始字符串使用'r'标志不是一个选项,因为我将包含目录路径的变量传递到我的程序中,以构造一个更大的字符串来表示DOS命令。你知道吗


Tags: 字符串路径目录stringtypeusersencodeprint
1条回答
网友
1楼 · 发布于 2024-04-27 03:06:58

这种行为的原因是操作系统getcwd()函数返回包含双“\”的预格式化字符串,即使预先固定为转义字符。而.encode()方法只会在后面的字符不是转义字符时附加第二个“\”。你知道吗

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

这里的解决方案是使用字典来定义所有可能的转义字符,然后使用循环来定位所讨论的字符串中的这些字符,并在任何转义字符之前直接附加一个辅助“\”。这应该在使用.encode()方法之前完成。 繁荣!你知道吗

相关问题 更多 >