2016-07-31 6 views
0

Ich versuchte den Code wie folgt, versucht, Verzeichnistrennzeichen zu Schrägstrich / zu ändern, aber immer noch in den Backslash \ stecken. Die Dokumentation besagt, dass die Funktion Pfade mit dem Verzeichnistrennzeichen os.sep verbindet, aber das hat in meinem Fall nicht funktioniert.Wie lege ich in Python das Verzeichnistrennzeichen in der Funktion os.path.join() fest?

import os 
os.sep = '/' 
print(os.sep) 
print(os.path.join('.', 'path')) 
+1

Vielleicht willst du stattdessen ''/'. Join (['.', 'Path'])' 'stattdessen? In den meisten Fällen (nicht alle, aber Vorsicht) erhalten Sie die gleiche Ausgabe, als wäre Ihr 'sep' so eingestellt, wie Sie es erhofft hatten. – jedwards

+0

Warum möchten Sie das tun? Ist der Backslash eigentlich falsch für Ihr Betriebssystem? –

Antwort

1

Sie können sich den Quellcode für die verschiedenen Betriebssysteme ansehen. Zum Beispiel ist die Mac-Version:

def join(s, *p): 
    path = s 
    for t in p: 
     if (not s) or isabs(t): 
      path = t 
      continue 
     if t[:1] == ':': 
      t = t[1:] 
     if ':' not in path: 
      path = ':' + path 
     if path[-1:] != ':': 
      path = path + ':' 
     path = path + t 
    return path 

Sie können sehen, dass es direkt in der Funktion platziert ist. Es hängt nicht von os.sep ab. Jede Python-Installation enthält die os.path-Funktionen für jedes Betriebssystem. Sie sind im Python-Verzeichnis unter macpath.py, ntpath.py und posixpath.py verfügbar. Wenn Sie an jeder schauen, werden Sie feststellen, dass das posixpath Modul hat, was Sie wollen:

import posixpath 

print(posixpath.join('.', 'path')) 
3

Ich denke this die Fragen beantwortet, warum Python einen bestimmten Separator verwendet.

Sie können das Modul Pathlib verwenden, um Ihre Pfade zu erstellen und anzugeben, ob Sie einen Posix- oder Windows-Pfad verwenden möchten.

Beispiel:

from pathlib import PurePosixPath, PureWindowsPath 

print(PurePosixPath('some', 'silly', 'long', 'path')) 
>> some/silly/long/path 

print(PureWindowsPath('some', 'silly', 'long', 'path')) 
>> some\silly\long\path 

Achten Sie darauf, die pure Version von PosixPath und WindowsPath. Wenn Sie versuchen, WindowsPath auf einem Posix-System zu verwenden, erhalten Sie die folgende Fehlermeldung erhalten:

NotImplementedError: cannot instantiate 'WindowsPath' on your system 

Dies auch im docs angegeben:

If you want to manipulate Windows paths on a Unix machine (or vice versa). You cannot instantiate a WindowsPath when running on Unix, but you can instantiate PureWindowsPath .

0

Sie Funktion in os ersetzen kann. Weg mit Selbst besitzen:

import os 
path = "public\\INSTALL\\" 
print("Initial unmodified join return: '%s'" % os.path.join('.', path)) 
native_os_path_join = os.path.join 
def modified_join(*args, **kwargs): 
    return native_os_path_join(*args, **kwargs).replace('\\', '/') 
os.path.join = modified_join 
print("Modified join return: '%s'" % os.path.join('.', path)) 

Ausgang:

Initial unmodified join return: '.\public\INSTALL\' 
Modified join return: './public/INSTALL/'