我在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