我想在 python 中构建一个绝对路径,同时对路径分隔符之类的东西保持相当的清醒。
edit0: 例如在我的文件系统 /etc/init.d
(或 C:\etc\init.d
在 w32 上),我只想从元素 etc
和 init.d
构造它(在 w32 上,我可能还需要一个磁盘 ID,像 C:
)
为了不必担心路径分隔符,os.join.path()
显然是首选工具。但似乎这只会创建 relative 路径:
print("MYPATH: %s" % (os.path.join('etc', 'init.d'),)
MYPATH: etc/init.d
添加一个虚拟的第一个元素(例如 ''
)没有任何帮助:
print("MYPATH: %s" % (os.path.join('', 'etc', 'init.d'),)
MYPATH: etc/init.d
使第一个元素成为绝对元素显然有帮助,但这违背了使用 os.path.join()
print("MYPATH: %s" % (os.path.join('/etc', 'init.d'),)
MYPATH: /etc/init.d
edit1: 使用 os.path.abspath()
只会尝试将相对路径转换为绝对路径。
例如考虑在工作目录 /home/foo
中运行以下命令:
print("MYPATH: %s" % (os.path.abspath(os.path.join('etc', 'init.d')),)
MYPATH: /home/foo/etc/init.d
那么,“root”路径的标准跨平台方式是什么?
root = ??? # <--
print("MYPATH: %s" % (os.path.join(root, 'etc', 'init.d'),)
MYPATH: /etc/init.d
edit2: 问题真的归结为:由于 /etc/init.d
中的前导斜杠使该路径成为绝对路径,有没有办法构造这个前导斜线以编程方式?
(我不想假设前导斜杠表示绝对路径)
最佳答案
使用 os.sep
作为 root 对我有用:
path.join(os.sep, 'python', 'bin')
Linux:/python/bin
Windows:\python\bin
将 path.abspath()
添加到组合中也会为您提供 Windows 上的驱动器号,并且仍然与 Linux 兼容:
path.abspath(path.join(os.sep, 'python', 'bin'))
Linux:/python/bin
Windows:C:\python\bin
关于python - 用 os.path.join() 构造绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17429044/