簡體   English   中英

Python,如何在os.path.join()中指定目錄分隔符 function?

[英]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版本的PosixPathWindowsPath 如果您嘗試在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.pyntpath.pyposixpath.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM