我嘗試了下面的代碼,嘗試將目錄分隔符更改爲正斜槓/
但仍卡在反斜槓\
中。文檔說該函數使用目錄分隔符os.sep
加入路徑,但這在我的情況下不起作用。在Python中,如何在os.path.join()函數中指定目錄分隔符?
import os
os.sep = '/'
print(os.sep)
print(os.path.join('.', 'path'))
我嘗試了下面的代碼,嘗試將目錄分隔符更改爲正斜槓/
但仍卡在反斜槓\
中。文檔說該函數使用目錄分隔符os.sep
加入路徑,但這在我的情況下不起作用。在Python中,如何在os.path.join()函數中指定目錄分隔符?
import os
os.sep = '/'
print(os.sep)
print(os.path.join('.', 'path'))
您可以看看不同操作系統的源代碼。例如,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.py
,ntpath.py
和posixpath.py
下的Python目錄中。如果你看一下每個人,你會發現posixpath
模塊有你想要什麼:
import posixpath
print(posixpath.join('.', 'path'))
我覺得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
版本的PosixPath
和WindowsPath
。如果你想爲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 instantiatePureWindowsPath
.
可以在操作系統替換功能。路徑,具有自自己:
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/'
也許你想''/'。join(['。','path'])'?對於大多數情況(不是所有的情況,但是,要小心),你會得到相同的輸出,就像你的'sep'被設置爲你所希望的一樣。 – jedwards
你爲什麼想這樣做?您的操作系統反斜槓實際上是否錯誤? –