【问题标题】:Convert bytes -> string -> back to bytes, and get original value将字节 -> 字符串 -> 转换回字节,并获取原始值
【发布时间】:2020-07-09 16:48:38
【问题描述】:

我检查了有关此问题的所有 Stackoverflow 问题,但没有一个可以回答我的问题。我需要将 \\ 转换为 \
已编辑:
这就是我正在尝试的:

>>> a = b'\xe5jb\x8c?Q$\xf3\x1d\x97^\xfa3O\xa6U.txt'
>>> b = str(a)
>>> b
"b'\\xe5jb\\x8c?Q$\\xf3\\x1d\\x97^\\xfa3O\\xa6U.txt'"
>>> b = b.replace('b\'','')
>>> b = b[:len(b)-1]
>>> b
'\\xe5jb\\x8c?Q$\\xf3\\x1d\\x97^\\xfa3O\\xa6U.txt'
>>> c = bytes(b,'utf8')
>>> c
b'\\xe5jb\\x8c?Q$\\xf3\\x1d\\x97^\\xfa3O\\xa6U.txt'
>>> a == c
False

如何使a==c 为真?我试过了

 .replace("\\\\","\\") 

但这无济于事。字符串保持不变。我需要将变量'a'中的字节作为文本存储到文件中并回调它。 Python-3.8,Windows=10

【问题讨论】:

  • b=b[:len(d)-1] 中的 d 是什么?
  • 你想达到什么目的? b'abc' 用于字节。在字符串` is used as escape character. So \` 中表示保持忽略 ``
  • 请用文字说明问题,不完全依赖代码,不能通过关键字搜索。您正在尝试将字节对象a 转换为等效字符串b,然后再转换回字节c,并获取原始字节。 ``的转义只是一个症状。

标签: python python-3.x error-handling


【解决方案1】:

对字符串使用 .replace() 函数

【讨论】:

    【解决方案2】:

    您可以使用decode 方法将c 转换为字符串,然后在使用b'...' 包装后使用ast.literal_eval 将其评估为字节文字:

    from ast import literal_eval
    a = b'\xe5jb\x8c?Q$\xf3\x1d\x97^\xfa3O\xa6U.txt'
    c = b'\\xe5jb\\x8c?Q$\\xf3\\x1d\\x97^\\xfa3O\\xa6U.txt'
    c = literal_eval("b'%s'" % c.decode())
    print(a == c)
    

    这个输出:True

    【讨论】:

    • 这个答案是完美的!我需要给c=literal_eval("b'%s'" % c.decode())
    • 有没有办法阻止 bytes() 返回输出?
    猜你喜欢
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多