Python 如何将带转义的字符串转换为不带转义的字符串?

2017-02-06 15:15:49 +08:00
 DeTamble

如下,我希望将 "\100\200" 转换为 r"\100\200",应该怎样做?

>>> "\100\200"
'@\x80'
>>> r"\100\200"
'\\100\\200'

这个问题是在处理文件目录字符串时遇到的。

16989 次点击
所在节点    Python
10 条回复
imn1
2017-02-06 15:29:34 +08:00
os.sep
doumeki
2017-02-06 15:47:20 +08:00
用 r"\100\200"难道不行,虽然打出来是两个杠。
目录分隔 os.sep 是正解。
DeTamble
2017-02-06 17:25:54 +08:00
@imn1
@doumeki
感谢,不过以后遇到这种需要转换字符串的情况该怎么做呢?这是编码问题吗……
doumeki
2017-02-06 17:44:18 +08:00
@DeTamble
这不是编码问题。每种语言都有这种\转义的啊。
python 应该就是加 r 代表不转义, C#用 @代表不转义。
单代"\"使用"\\"来表示。
phrack
2017-02-06 18:53:41 +08:00
看不太懂例子,就是想把\n 这个换行符,换成两个符合 \ 加上一个 n 的字符串?
wizardforcel
2017-02-06 19:10:51 +08:00
每个字符替换为 \<oct>
DeTamble
2017-02-06 19:16:10 +08:00
@phrack 是的,"\n"打印出来是一个回车,需要转换为 raw string 打印"\n"本身。
shyling
2017-02-06 19:59:24 +08:00
a = '\n\n\n'
repr(a) -> "'\\n\\n\\n'"
可以再考虑去掉引号
_[1:-1]
phrack
2017-02-06 20:07:42 +08:00
@DeTamble 自动化转换应该是不可能的,把\n 拿来举例子, python2.7

x = '\n'

实际上如果上面这个语句已经执行完,那么 x 实际上是一个长度为 1 的 str ,里面只有一个字节,是 0x0a ,也就是 10 ,如果要把它不转义打印出来,或者是存储到另外一个对象 y 里,那么我们也不能讲 y 里面就得存储\n ,因为不转义的话,实际上应该是\x0a ,这个\x0a 到\n 的过程是我们人类自己做的规定,如果你要把\x0a 换为\n ,要把\x0d 换为\r ,那就得有一个转换的表才行,而且这一整张表都得写出来: http://baike.baidu.com/view/73.htm ,这里没有考虑 unicode 的问题。

好像说的复杂了,也就是说\n, \r, 要从 0x0a, 0x0d 转换过来,需要一张表,当然, ascii 里面定义的转义字符不多,可以写到程序里就可以了,然后

for key, value in escape_table:
x.replace( key, value )

即可。
DeTamble
2017-02-06 21:24:03 +08:00
@phrack 看懂了,十分感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/338457

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX