2017-07-27 204 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