2017-07-27 23 views
0

データを保存しました:b'\xa2ac\xa0av\xf6' of <class 'bytes'> SAP HANAにありますが、pyHDBを使用してクエリを実行すると、バックスラッシュがエスケープされます。b'\\xa2ac\\xa0av\\xf6' <class 'bytes'>バイナリバックスラッシュをバイトテキストで1つのバックスラッシュに置き換えます。

どのようにデータ型をバイトとして保持しますが、二重バックスラッシュは削除しますか?私はそれを文字列に変換し、バックスラッシュを置き換えてバイトに戻してみましたが、バイトに戻すとダブルバックスラッシュが再びそこにあります。私はPython3を使用しています。ありがとうございました!

答えて

0

これは動作しますが、非常にエレガントであるかどうかはわかりません。

import ast 

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

あなたが3.2よりも古いPythonのバージョンを使用している場合、あなたはおそらくevalast.literal_evalを交換する必要があります。その組み込み関数は時にはでも危険ですが、私はアマチュアプログラマーとしてなぜeval(str(b))bがバイトオブジェクトであるのかを考えることができません。 bassert type(b) == bytesのバイトオブジェクトであることを確認することもできます。

(ちなみに、私が何であるかをSAP HANAかpyHDB知りませんが、私はまだ質問に答えだと思う)

EDIT/NOTE

さえassert type(b) == 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

この素晴らしい仕事:誰かがそうは次のように、何か他のものを意味する名前bytesを再定義することを決定した場合の被害!ありがとうございました! – AOyung

関連する問題