os.path.join 有必要吗?
目前我在我的 Django 项目中几乎总是使用 os.path.join
来支持跨操作系统的兼容性;我现在唯一不使用它的地方是模板名称和 URL。所以在我想要路径 '/path/to/some/file.ext'
的情况下,我会使用 os.path.join('path', 'to', 'some', 'file.ext')
。
不过我刚在 Windows 上测试了我的项目,看看这样做是否有效或必要,结果发现 Windows 可以接受 '/'
或 '\\'
(在 Python 之外工作时用 '\'
),而且所有 UNIX 系统都使用 '/'
,所以似乎没有理由一定要使用 '\\'
。这样的话,使用 os.path.join
还有必要吗?
有没有可能在某些操作系统上使用 '/'
或 posixpath
会导致问题(不包括 XP 或更早的版本,因为它们不再官方支持)?如果没有的话,我想我会直接使用 posixpath
或者在连接变量和字符串时加上 '/'
,而不是把字符串路径分开(也就是说保持 '/path/to/some/file.ext'
不变),除非有其他原因让我不能这样做,除了可能会出错。
为了避免这个问题被认为主要是基于个人观点,我想澄清一下,我具体想问的是,不使用 os.path.join
是否会导致 Python 程序在支持的操作系统上无法按预期工作。
2 个回答
如果你要把文件名展示给用户,最好让这个文件名符合常见的操作系统规则。
在Windows系统中,从有路径的那天起,就可以使用/
作为路径分隔符,这其实是早期DOS系统的一个特点。
微软的Windows API对你使用斜杠(/
)还是反斜杠(\
)并不在意,所以在Windows上通常用哪种作为分隔符都可以。不过,在命令行(也就是“DOS窗口”,比如command.com
或cmd.exe
)中,路径一般需要用反斜杠(\
),因为斜杠(/
)在这些Windows命令行中是用来表示命令选项的。因此,比如说你在Python中构建一个命令行并启动一个命令行去执行这个命令,通常需要在Windows上使用反斜杠(\
)作为分隔符。
还有一种情况是在Lib/macpath.py
中:那里sep
被设置为冒号(:
),这是为了兼容旧版的Macintosh系统。我相信这是Python运行过的唯一一个不接受斜杠(/
)作为分隔符的系统。
补充说明:这里有关于Windows命名规则的详细介绍。别怪我哦;-)