V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
DeTamble
V2EX  ›  Python

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

  •  
  •   DeTamble · 2017-02-06 15:15:49 +08:00 · 16979 次点击
    这是一个创建于 2841 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    第 1 条附言  ·  2017-02-06 19:18:49 +08:00
    意思就是将 unicode string 转换为 raw string ,打印 "\n\n\n" 本身而不是三个回车符。
    10 条回复    2017-02-06 21:24:03 +08:00
    imn1
        1
    imn1  
       2017-02-06 15:29:34 +08:00   ❤️ 1
    os.sep
    doumeki
        2
    doumeki  
       2017-02-06 15:47:20 +08:00   ❤️ 1
    用 r"\100\200"难道不行,虽然打出来是两个杠。
    目录分隔 os.sep 是正解。
    DeTamble
        3
    DeTamble  
    OP
       2017-02-06 17:25:54 +08:00
    @imn1
    @doumeki
    感谢,不过以后遇到这种需要转换字符串的情况该怎么做呢?这是编码问题吗……
    doumeki
        4
    doumeki  
       2017-02-06 17:44:18 +08:00
    @DeTamble
    这不是编码问题。每种语言都有这种\转义的啊。
    python 应该就是加 r 代表不转义, C#用 @代表不转义。
    单代"\"使用"\\"来表示。
    phrack
        5
    phrack  
       2017-02-06 18:53:41 +08:00 via Android
    看不太懂例子,就是想把\n 这个换行符,换成两个符合 \ 加上一个 n 的字符串?
    wizardforcel
        6
    wizardforcel  
       2017-02-06 19:10:51 +08:00 via Android
    每个字符替换为 \<oct>
    DeTamble
        7
    DeTamble  
    OP
       2017-02-06 19:16:10 +08:00
    @phrack 是的,"\n"打印出来是一个回车,需要转换为 raw string 打印"\n"本身。
    shyling
        8
    shyling  
       2017-02-06 19:59:24 +08:00   ❤️ 1
    a = '\n\n\n'
    repr(a) -> "'\\n\\n\\n'"
    可以再考虑去掉引号
    _[1:-1]
    phrack
        9
    phrack  
       2017-02-06 20:07:42 +08:00   ❤️ 1
    @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
        10
    DeTamble  
    OP
       2017-02-06 21:24:03 +08:00
    @phrack 看懂了,十分感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   941 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:42 · PVG 06:42 · LAX 14:42 · JFK 17:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.