我在SAP HANA中存储了我的数据:b'\xa2ac\xa0av\xf6' of <class 'bytes'>
,但是当我使用pyHDB查询它时,结果会如此跳过反斜杠:b'\\xa2ac\\xa0av\\xf6' <class 'bytes'>
。用字符串中的单个反斜杠替换双反斜杠
如何保持数据类型为字节但删除双反斜杠?我已经把它转换成一个字符串并替换反斜杠然后将它转换回字节,但是一旦我将它转换回字节,双反斜杠就会再次出现。我正在使用Python3。谢谢!
我在SAP HANA中存储了我的数据:b'\xa2ac\xa0av\xf6' of <class 'bytes'>
,但是当我使用pyHDB查询它时,结果会如此跳过反斜杠:b'\\xa2ac\\xa0av\\xf6' <class 'bytes'>
。用字符串中的单个反斜杠替换双反斜杠
如何保持数据类型为字节但删除双反斜杠?我已经把它转换成一个字符串并替换反斜杠然后将它转换回字节,但是一旦我将它转换回字节,双反斜杠就会再次出现。我正在使用Python3。谢谢!
这一个工程,但我不知道它是否非常优雅。
import ast
def remove_double_backslashes(b):
return ast.literal_eval(str(b).replace('\\\\', '\\'))
如果您使用的是旧版本的Python超过320,你就可能需要使用eval
更换ast.literal_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...
这真是棒极了!谢谢! – AOyung