Backslash/Forwardslash Probleme....

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sublist
User
Beiträge: 33
Registriert: Donnerstag 11. Dezember 2008, 16:04

Hallo.

Ich möchte meine Pfade in Forward Slashes umwandeln.
Die Pfade sind schon vorhanden und müssen konvertiert werden.

Code: Alles auswählen

def forwardSlash(path):
    #newPath = path.replace(r'\ ',"/")
    #newPath = path.replace(chr(92),"/")
    #newPath = path.replace('\\',"/")
    return newPath

forwardSlash('c:\test')
Leider geht es nur wenn meine Ausgangspfade Doppel Backslashes haben, was sie leider nicht haben.

Danke :)
Zuletzt geändert von Anonymous am Dienstag 31. Januar 2012, 10:13, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
deets

Du musst dich mal ein bisschen schlau machen ueber escape-codes. In deinem Test ist "\test" nicht ein Slash gefolgt von einem t, sondern ein tab-zeichen. Kein Wunder, dass du da nicht ersetzen kannst.

Aber mit deinen echten Daten sollte es gehen, denn die sind vermutlich von woanders her & nicht als string-literale vorhanden, oder?
sublist
User
Beiträge: 33
Registriert: Donnerstag 11. Dezember 2008, 16:04

Leider sind meine Original Daten auch so:
x:/xxx/xxx/xxx\xxx\xxx.txt
und kommen durch diese Funktion:

Code: Alles auswählen

def listFilesInDirTree(path):

    myFiles = []

    for top, dirs, files in os.walk(path):
        for each in files:
            temp = ((os.path.join(top, each)))
            myFiles.append(temp)

    return myFiles
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

sublist hat geschrieben:

Code: Alles auswählen

[...]
forwardSlash('c:\test')
Leider geht es nur wenn meine Ausgangspfade Doppel Backslashes haben, was sie leider nicht haben.
Du hast einen Fehler im Test. Backslashes in Strings brauchen eine Escape-Sequenz, also einen führenden Backslash. Das \t was du jetzt dort stehen hast wird zu einem Tabulator. Aus \\ im String macht Python einen String der nur ein Backslash enthält. Alternativ kannst du auch "raw strings" verwenden.

Code: Alles auswählen

def replace_slash(path):
    return path.replace('\\',"/")

    print replace_slash('c:\\test')
    print replace_slash(r'c:\test')
Bezüglich deiner Namensvergabe solltest du dir übrigens mal die Konventionen in PEP-8 ansehen.
sublist
User
Beiträge: 33
Registriert: Donnerstag 11. Dezember 2008, 16:04

Ach ja.. Hab ich ganz übersehen, daß ich im String ein Escape drin hatte.

Sorry, wie dumm von mir^^

Danke
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

sublist hat geschrieben:Leider sind meine Original Daten auch so:

Code: Alles auswählen

x:/xxx/xxx/xxx\xxx\xxx.txt
Dann ist es doch richtig. Das ist der echte Inhalt des Strings der von Python verwendet wird. In Python selber würdest du ihn so erzeugen:

Code: Alles auswählen

x = "x:/xxx/xxx/xxx\\xxx\\xxx.txt"

# oder
x = r"x:/xxx/xxx/xxx\xxx\xxx.txt"
x ist in beiden Fällen das, was du angegeben hast. Bitte nicht die Darstellung im Code mit dem echten Inhalt verwechseln.
Antworten