os.path.join是否必要?

11

目前我在我的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程序无法按预期工作。


1
虽然这可能是一个过于深奥的问题,但使用硬编码的路径分隔符会导致在 RISC OS 上无法移植..(并且有相应的端口到该系统)。 - user2864740
RISC OS 是否兼容 Django、Nginx、Supervisor 以及各种 Django 库?如果不兼容,那么在这个项目中我就不需要担心它了,但如果兼容的话,我可能需要考虑一下。 - semicolon
2个回答

15

微软Windows API不关心你是用/还是\作为分隔符,在Windows上通常使用任何一个都可以。然而,命令行("DOS box" - command.comcmd.exe)命令通常需要在路径中使用\(在这些本地Windows shells中使用/来标记命令选项)。因此,例如,如果您在Python中建立一个命令行并启动一个shell来执行该命令,则通常需要在Windows上使用\分隔符。

另一个情况在Lib/macpath.py中涵盖:在那里,sep设置为:(冒号),以迎合旧的Macintosh系统。我相信这是Python曾经运行的唯一不接受/作为分隔符的系统。

编辑:在这里长篇介绍了Windows命名规则。别怪我;-)


在cmd.exe中哪些命令不能工作?因为我刚才测试了cd './test/test'和'python .test/manage.py',它们都能正常工作。 - semicolon
好的,谢谢!我立即测试了“cd”和“python”,因为它们是我主要使用并且假定/实际上确实有效的命令。 - semicolon
2
对于非本地命令(如 python),shell 并不关心,因为 shell 不会解释命令,只是将字符串传递给您正在运行的程序(命令行上命名的第一个东西)。问题通常出现在由 shell 实现的命令中,例如 dircd。但是,由于这是 Windows,没有什么是一致的 :-( - Tim Peters
3
注意,如果您需要处理长路径(使用 \\?\ 格式),则必须使用反斜杠。 - Harry Johnston
对于Windows网络共享路径,这仍然是真的吗?我认为Windows明确只允许\networklocation\path\。 - Marcel Wilson
显示剩余3条评论

4
如果您需要展示文件名给用户,最好让该文件名遵循通常的操作系统约定。
自有路径以来,Windows 就一直能够使用 “/” 作为路径分隔符,这是 DOS 的一个特性。

在这种情况下,它是在网站上,因此路径将被呈现的唯一时间是URL路径,它们将始终使用/,因此我可以放心地始终使用/。感谢您提供有关/始终受支持的信息。 - semicolon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接