我们知道,windows接受这两个"\"并"/"作为分隔符.但在python中,"\"使用.例如,呼叫os.path.join("foo","bar"),'foo\\bar'将被退回.令人讨厌的是,有一个转义字符,因此您不能只复制路径字符串并粘贴到资源管理器位置栏.
我想知道是否有任何方法可以将python "/"用作默认分隔符,我已经尝试将os.path.sep和os.sep的值更改为"/",但os.path.join仍然使用"\\".
什么是正确的方法?
PS:
我只是不明白为什么python在windows上使用"\"作为默认分隔符,也许旧版本的windows不支持"/"?
这就是Python如何检测你的操作系统:
# in os.py
if 'posix' in _names:
...
import posixpath as path
elif 'nt' in _names:
...
import ntpath as path
Run Code Online (Sandbox Code Playgroud)
因此,在Windows ntpath上加载模块.如果你检查ntpath.py和posixpath.py模块,你会发现ntpath.join()它有点复杂,这也是因为你提到的原因:Windows理解/为路径分隔符.
底线:虽然你可以posixpath.join()在Windows中使用(只要参数是POSIX格式的),我不建议这样做.
要尽可能简单地回答您的问题,只需使用posixpath而不是os.path.
所以代替:
from os.path import join
join('foo', 'bar')
# will give you either 'foo/bar' or 'foo\\bar' depending on your OS
Run Code Online (Sandbox Code Playgroud)
使用:
from posixpath import join
join('foo', 'bar')
# will always give you 'foo/bar'
Run Code Online (Sandbox Code Playgroud)
为什么不定义一个自定义的显示函数呢?
例如
def display_path(path):
return path.replace("\\", "/")
Run Code Online (Sandbox Code Playgroud)
如果你想替换str.join,os.path.join你可以这样做(str.join需要一个列表,os.path.join需要*args):
join = lambda *args: "/".join(args)
Run Code Online (Sandbox Code Playgroud)
也许更好的办法是让 Python 标准化所有内容,然后替换,例如:
join = lambda *args: os.path.join(*args).replace("\\", "/")
Run Code Online (Sandbox Code Playgroud)
上面的唯一问题可能是在 posix 上,当文件路径中有空格时。
if然后,您可以在 utils 文件的顶部放置一条语句,并将display_path和join分别定义为无操作和 os.path.join(如果不在 Windows 上)。
| 归档时间: |
|
| 查看次数: |
10162 次 |
| 最近记录: |