2017-09-19 2 views
-2

Bearbeitete Frage: Ich schreibe eine Python-Funktion, die die Zeichenfolge eines Pfades als Kopie aus Windows eingefügt (also mit umgekehrten Schrägstrichen) und gibt eine Zeichenfolge mit Schrägstrichen, die verwendet werden können von Python als Pfad. Das Problem mit der Kombination von Rückschlägen und anderen Zeichen entsteht, wie \ n, \ b ... Dank Coldspeed, ich habe jetzt eine Funktion, die Art den Trick:Ersetzen von Backlashes mit Schrägstrichen in einer Zeichenfolge

def back2forwardSlash(backSlash_string):  
    return backSlash_string.replace('\\', '/') 

Was ist nach wie vor unbefriedigend ist, dass Ich muss die Funktion mit der r vor der Zeichenfolge aufrufen, um es als roh zu lesen: fileNamePath = back2forwardSlash(r'C:\Users\Dropbox\netCFD4\b30.137.nc') Dies verhindert, eine Variable in die Funktion übergeben, anstatt in der Zeichenfolge einfügen. Zumindest glaube ich nicht, dass ich eine Lösung dafür habe.

+1

hast du es auch mal versucht 'backSlash_string.replace (' \\ ','/') '? – GPhilo

+0

Versuchen Sie, diesen Ratschlag zu befolgen: https://Stackoverflow.com/a/26867674/4528269 –

Antwort

1

The pythonic way of doing this would be using string.replace.

def foo(string): 
    return string.replace('\\', '/') 

Darüber hinaus ist der Grund für Ihre Fehler, dass ein Backslash als Beginn einer Escape-Sequenz genommen werden kann, die eine Gruppe von Zeichen ist, die anders als ihre Darstellung interpretiert werden. Dies bedeutet, dass die Sequenz \b nicht zwei separate Zeichen ist, sondern ein einzelnes Zeichen \b oder \x08. Also, Sie werden eine rohe Zeichenfolge an Ihre Funktion übergeben wollen:

print(foo(r'C:\Users\Dropbox\netCFD4\b30.137.nc')) 

Eine rohe Zeichenfolge behandelt die Backslashes wörtlich. Die Alternative wäre, all deinen Backslashes zu entkommen.

+0

Danke COLDSPEED. Die replace-Methode macht das ziemlich gut, aber das Problem wird tatsächlich nur gelöst, indem man die Funktion mit dem "r" vor der Argument-Zeichenkette aufruft, wie Sie vorgeschlagen haben. Dies ist nur bedingt befriedigend, da ich die Funktion nicht mit einer Variablen übergeben kann, sondern die Zeichenfolge immer manuell nach dem "r" einfügen muss, um sie zu rohen. Zumindest glaube ich nicht, dass ich eine Lösung habe. – Pauli

+0

@Pauli Wenn Ihre Strings so eintreffen, liegt ein Problem mit der Quelle vor. Außerdem gibt es keine echte Möglichkeit, Variablen zu rohen Strings zu machen ... –

Verwandte Themen