2016-07-31 734 views
0

我嘗試了下面的代碼,嘗試將目錄分隔符更改爲正斜槓/但仍卡在反斜槓\中。文檔說該函數使用目錄分隔符os.sep加入路徑,但這在我的情況下不起作用。在Python中,如何在os.path.join()函數中指定目錄分隔符?

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

也許你想''/'。join(['。','path'])'?對於大多數情況(不是所有的情況,但是,要小心),你會得到相同的輸出,就像你的'sep'被設置爲你所希望的一樣。 – jedwards

+0

你爲什麼想這樣做?您的操作系統反斜槓實際上是否錯誤? –

回答

1

您可以看看不同操作系統的源代碼。例如,Mac版本是:

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 

您可以看到它直接放置在函數中。它不取決於os.sep。每個Python安裝包括每個操作系統的os.path函數。它們位於macpath.pyntpath.pyposixpath.py下的Python目錄中。如果你看一下每個人,你會發現posixpath模塊有你想要什麼:

import posixpath 

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

我覺得this解答了爲什麼Python使用特定的分離問題。

也就是說,您可以使用Pathlib模塊構建您的路徑並指定您是否需要Posix或Windows路徑。

例子:

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 

確保您使用pure版本的PosixPathWindowsPath。如果你想爲POSIX系統上使用WindowsPath,你會得到以下錯誤:

NotImplementedError: cannot instantiate 'WindowsPath' on your system 

這也是在docs規定:

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

可以在操作系統替換功能。路徑,具有自自己:

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)) 

輸出:

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