2017-07-27 12 views
0

Ich habe meine Daten gespeichert: b'\xa2ac\xa0av\xf6' of <class 'bytes'> in SAP HANA, aber wenn ich es mit PyHDB abfragen, entkommt das Ergebnis die umgekehrten Schrägstriche als solche: b'\\xa2ac\\xa0av\\xf6' <class 'bytes'>.Ersetzen Sie doppelte Backslash mit einzelnen Backslash in Bytezeichenfolge

Wie behalte ich den Datentyp als Bytes, aber entfernen Sie die doppelten Backslashes? Ich habe es in eine Zeichenkette verwandelt und die umgekehrten Schrägstriche ersetzt und dann wieder in Bytes umgewandelt, aber sobald ich es wieder in Bytes konvertiert habe, sind die doppelten Backslashes wieder da. Ich benutze Python3. Vielen Dank!

Antwort

0

Dieser funktioniert, aber ich bin mir nicht sicher, ob es sehr elegant ist.

import ast 

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

Falls Sie eine ältere Python-Version als 3.2 verwenden, müssen Sie wahrscheinlich ast.literal_eval mit eval ersetzen. Diese eingebaute Funktion kann manchmal gefährlich sein, aber ich als Amateur-Programmierer kann nicht denken, warum eval(str(b)), wo b ist ein Byte-Objekt, könnte jeden Schaden tun. Sie können sogar überprüfen, ob b ein Byteobjekt mit assert type(b) == bytes ist.

(Übrigens, ich weiß nicht, was für SAP HANA oder pyHDB sind, aber ich denke, dass ich immer noch die Frage beantwortet)

EDIT/NOTE:

Auch assert type(b) == bytes nicht verhindern Schaden, wenn jemand beschließt, den Namen bytes bedeutet etwas anderes, neu zu definieren, etwa so:

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

das funktionierte großartig! Vielen Dank! – AOyung

Verwandte Themen