[英]In Python, how do I specify directory separator in os.path.join() function?
我嘗試了如下代碼,試圖將目錄分隔符更改為正斜杠/
但仍然停留在反斜杠\
中。 文檔說 function 使用目錄分隔符os.sep
加入路徑,但這在我的情況下不起作用。
import os
os.sep = '/'
print(os.sep)
print(os.path.join('.', 'path'))
我認為這回答了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中指定:
如果要在Unix計算機上操作Windows路徑(反之亦然)。 在Unix上運行時,不能實例化
WindowsPath
,但是可以實例化PureWindowsPath
。
您可以查看不同操作系統的源代碼。 例如,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'))
您可以將os.path中的函數替換為自己的:
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/'
所以總而言之,如果由於某種原因 os.path.join() 無法正常工作,我們可以簡單地執行以下操作
os.sep.join([path,name])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.