我尝试了下面的代码,试图将目录分隔符更改为正斜杠/
,但仍然卡在反斜杠\
上。文档说该函数使用目录分隔符os.sep
连接路径,但在我的情况下这并没有起作用。
import os
os.sep = '/'
print(os.sep)
print(os.path.join('.', 'path'))
我尝试了下面的代码,试图将目录分隔符更改为正斜杠/
,但仍然卡在反斜杠\
上。文档说该函数使用目录分隔符os.sep
连接路径,但在我的情况下这并没有起作用。
import os
os.sep = '/'
print(os.sep)
print(os.path.join('.', 'path'))
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
如果你想在Unix机器上(或者反过来)操作Windows路径。在Unix上运行时,无法实例化
WindowsPath
,但可以实例化PureWindowsPath
。
pathlib
,您可以在构建的Path
上调用.as_posix()
,以获得其字符串表示形式,其中正斜杠作为分隔符。>>> from pathlib import Path
>>> Path('dirA', 'dirB', 'file.txt').as_posix()
'dirA/dirB/file.txt'
>>> from pathlib import PureWindowsPath
>>> PureWindowsPath('dirA\\dirB', 'file.txt').as_posix()
'dirA/dirB/file.txt'
您可以查看不同操作系统的源代码。例如,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
函数。它们在Python目录下的macpath.py
、ntpath.py
和posixpath.py
中可用。如果你查看每一个模块,你会注意到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.sep.join([path,name])
'/'.join(['.', 'path'])
?对于大多数情况(但不是全部,所以要小心),你将得到与你期望的分隔符相同的输出。 - jedwards