2017-07-27 207 views
0

我在SAP HANA中存储了我的数据:b'\xa2ac\xa0av\xf6' of <class 'bytes'>,但是当我使用pyHDB查询它时,结果会如此跳过反斜杠:b'\\xa2ac\\xa0av\\xf6' <class 'bytes'>用字符串中的单个反斜杠替换双反斜杠

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

回答

0

这一个工程,但我不知道它是否非常优雅。

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... 
+0

这真是棒极了!谢谢! – AOyung