2017-04-02 5 views
1

Etwas neu zu Python, um ehrlich zu sein, nicht sehr vertraut mit Codierung in PythonPython - Wie entkam Sequenz Stringliterale konvertieren

Angenommen, während text/html Eingänge Parsen, ich am Ende mit einem Weg nach oben, die wie folgt aussehen folgende

line = \\dfslocation\prj\gct\asw\sw_archive 

jedoch im früheren Teil der Verarbeitung, wie es scheint, die entkam Sequenz ‚\‘ und \ ‚t‘ ist bereits nicht mehr als wörtliches gespeichert.

literal_line = "%r"%(line) 
print literal_line 

\\dfslocation\prj\gct\x07sw\\sw_archive 

Meine beste Vermutung ist es passiert, wenn ich E-Mails in Text zu konvertieren versucht

for part in self.msg.walk(): 
    if part.get_content_type().startswith('text/plain'): 
    plain_text_part = part.get_payload(decode=False) 
    received_text += '\n' 
    received_text += plain_text_part 

received_text = received_text.encode('ascii', 'ignore') 

Später ich das als Netzwerkpfad verwenden möchten, die dies in seiner wörtlichen Form sein erfordern würde - dh \ a, nicht \ x07 (ASCII-Bel-Zeichen)

Die brutale Kraft, die ich mir vorstellen kann, würde alle Escape-Sequenz https://docs.python.org/2.0/ref/strings.html suchen und sie durch entsprechende String-Literale ersetzen.

Gibt es einen besseren Weg, dies zu tun?

Vielen Dank

Antwort

0

Versuchen Sie, den Inhalt der Zeilenvariablen als Rohdaten anstelle von ASCII zu speichern.

Wenn Sie so speichern, wie es ist, wird \a in x07 konvertiert.

>>> line = "\\dfslocation\prj\gct\asw\sw_archive" 
>>> line 
'\\dfslocation\\prj\\gct\x07sw\\sw_archive' 

Wenn Sie jedoch als Ausgang speichern, r'<your_ascii_text>' Format verwenden, wird es nicht zu Sonderzeichen konvertieren.

>>> line = r'\\dfslocation\prj\gct\asw\sw_archive' 
>>> print line 
\\dfslocation\prj\gct\asw\sw_archive 
>>> 

Raw-Strings behandeln \a als \a, sie gut geeignet für Fenster Dateinamen und regulären Ausdrücken zu machen.

Verwandte Themen