python - 用 os.path.join() 构造绝对路径

标签 python path absolute-path

我想在 python 中构建一个绝对路径,同时对路径分隔符之类的东西保持相当的清醒。

edit0: 例如在我的文件系统 /etc/init.d (或 C:\etc\init.d 在 w32 上),我只想从元素 etcinit.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/

相关文章:

python - 无法从 django 执行外部 python 脚本

python - 在 Django View 中使用 for 循环覆盖 ChoiceField 选择属性

java - 如何避免Spring的@RequestMapping路径冲突?

bash - $PATH 中的波浪号字符 ('~' )? (例如 : PATH ='~/bin' :/usr/bin:/bin)

c# - 绝对路径和相对路径有什么区别?

Python Pandas Groupby 根据索引重置值

python - C++ Qt : QProcess run Python script path specifying Python version

python - 当指定绝对路径 $/usr/bin/python 与 $ python 别名为相同路径时,如何会产生不同的结果?

Scala SBT CoffeeScripted,正确覆盖编译目标

python - 单个模型上的 Odoo 多个 many2many 或 One2many 字段