使用bytestring

时间:2017-07-27 17:11:47

标签: python-3.x hana backslash bytestring

我在SAP HANA中存储了我的数据:b'\xa2ac\xa0av\xf6' of <class 'bytes'>但是当我使用pyHDB查询它时,结果会转义反斜杠:b'\\xa2ac\\xa0av\\xf6' <class 'bytes'>

如何将数据类型保留为字节但删除双反斜杠?我已经看过将它变成一个字符串并替换反斜杠然后将其转换回字节但是一旦我将其转换回字节,双反斜杠就会再次出现。我正在使用Python3。谢谢!

1 个答案:

答案 0 :(得分:0)

这个有用,但我不确定它是否非常优雅。

import ast

def remove_double_backslashes(b):
    return ast.literal_eval(str(b).replace('\\\\', '\\'))

如果您使用的是比3.2更旧的Python版本,则可能需要将ast.literal_eval替换为eval。那个内置函数有时候是危险的,但我作为一个业余程序员不能想到为什么eval(str(b)),其中b是一个字节对象,可以做任何事情危害。您甚至可以验证b是带有assert type(b) == bytes的字节对象。

(顺便说一下,我不知道SAP HANA或pyHDB是什么,但我想我仍然回答了这个问题)

修改/注意

如果有人决定将名称assert type(b) == bytes重新定义为其他内容,即使bytes也不会造成伤害,例如:

class Foo:
    def __init__(self):
        self.oro = 0

    def __repr__(self):
        return "open('file', 'wb')" # DON'T DO THIS...

bytes = Foo # DON'T DO THIS...