2016-07-01 13 views
-2

Ich schreibe Code, der ein Onclick-Ereignis verwendet, um einige Dateipfade zu erhalten. Ich muss sicherstellen, dass diese Dateipfade Literale sind, um sicherzustellen, dass sie korrekt sind, damit der Rest meines Codes ausgeführt werden kann. Im Moment denke ich, dass ich die Dateipfade als Unicode bekomme. Im Grunde muss ich dies:Wie konvertiere ich einen String in ein String-Literal in Python?

r"File\location\extra\slash" 

Wie kann ich dies tun:

u"File\location\extra\slash" 

dies sein? Ich konnte niemanden finden, der das tatsächlich erfolgreich durchführen konnte und die Dokumentation hat dafür keine Beispiele. Ich kann nicht ändern, wie die Funktion, die mir das Onclick-Ereignis der Dateipfade gibt, funktioniert. Hier

ist der Code in Frage:

class SetLayer(object): 
    """Implementation for leetScripts_addin.button2 (Button)""" 
    def __init__(self): 
     self.enabled = True 
     self.checked = False 
    def onClick(self): 
     self.a = pythonaddins.GetSelectedCatalogWindowPath() 
     print self.a 
     #code split up path here 
     self.b = os.path.split(str(self.a)) 
     self.c = self.b[0] 
     self.d = os.path.split(self.c) 
     self.e = (self.b[1]) 
     self.f = (self.d[1]) 
     self.g = (self.d[0]) 
+3

Siehe auch: http://stackoverflow.com/questions/7262828/python-how-to-convert-string-literal-to-raw-string-literal – pokemon

+2

Es klingt wie Sie falsch sind, was Sie tatsächlich haben , wenn Sie sagen, Sie haben 'u" File \ location \ extra \ slash "'. Wenn Sie die Ausgabe nicht mit einem "r" an der Vorderseite und doppelten Anführungszeichen drucken möchten, benötigen Sie nicht unbedingt ein Zeichenfolgenliteral. Kannst du 'repr (your_current_string) 'ausdrucken und uns zeigen, was das anzeigt? – user2357112

+0

ist es nicht einfach nur "File \ location \ extra \ slash" .decode ('utf-8')? – dmitryro

Antwort

1

Von Ihre Kommentare, haben Sie a = u'File\\location\\extra\\slash', und Sie wollen e = 'slash', f = 'extra' und g = 'File\location' extrahieren. Nichts hier erfordert das Konvertieren von Zeichenfolgen in Zeichenfolgenliterale. Du wurdest gerade durch verschiedene Ebenen von entkommender Schnur verwirrt.

Sie müssen entscheiden, ob e, f und g Unicode-Strings oder Bytestrings sein sollen. Unicode-Strings sind wahrscheinlich die richtige Wahl, aber ich kann diese Wahl nicht für Sie treffen. Was auch immer Sie wählen, Sie müssen sicherstellen, dass Sie wissen, ob Sie mit Unicode-Strings oder Bytestrings zu jeder Zeit zu tun haben. Derzeit ist a eine Unicode-Zeichenfolge.

Wenn Sie Unicode-Strings für e, f und g, können Sie

self.e, temp = os.path.split(self.a) 
self.g, self.f = os.path.split(temp) 

tun Wenn Sie bytestrings wollen, müssen Sie self.a mit der entsprechenden Codierung zu codieren und zu tun, dann werden die oben os.path.split Anrufe . Welche Kodierung erforderlich ist, hängt von Ihrem spezifischen Betriebssystem und Ihrer Anwendung ab. sys.getfilesystemencoding() oder 'utf-8' sind wahrscheinlich Entscheidungen.

+0

Wo bin ich Zeichenfolge entkommen? – Steve

+0

@Steve: Der Code, den Sie gebucht haben, nicht Entweder man entkommt, aber rohe Zeichensyntax gibt Backslashes automatisch zurück, und 'u" Datei \ location \ extra \ slash "' sieht so aus, als hätten Sie zwei verschiedene Ebenen manuell maskiert. Sie haben in den Kommentaren auch 'repr' falsch verwendet Zeit ('repr' ist etwas entfliehen; es ist eigentlich die nächste Sache," eine Zeichenfolge in ein String-Literal zu konvertieren ", die Python hat, obwohl das nicht das ist, was Sie wirklich brauchen.) – user2357112

+0

Wie habe ich es falsch verwendet? Ich könnte mehr darüber lernen, wie Strings tatsächlich funktionieren - ich wusste nicht, dass es einen Unterschied macht. – Steve

-1

können Sie eval verwenden.

MacBookPro:~ DavidLai$ python 
Python 2.7.11 (default, Jan 22 2016, 08:29:18) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> x = u"File\location\extra\slash" 
>>> y = eval("r\"" + x + "\"") 
>>> y 
'File\\location\\extra\\slash' 
>>> type(y) 
<type 'str'> 
>>> 
+0

whoa nelly ... Englisch: www.doc-o-matic.com/webhelp/Tdlg.html Sie müssen nicht von einer Klippe springen noch ... (als Nebenbemerkung würde Ihre Lösung nicht funktionieren, wenn der Pfad '' File \ next \ location "') –

+1

auswertende Zeichenkette, die von js kommt (zB Webclient Seite und wahrscheinlich nicht vertrauenswürdige Benutzer) ist eine wirklich schlechte Idee. –

+1

'eval ('os.system (' rm -rf/etwas/wichtig ')") 'und das ist nur eine zufällige Sache, die passieren könnte – scope

Verwandte Themen