【发布时间】:2013-06-30 00:35:32
【问题描述】:
我想在 python 中构建一个绝对路径,同时对路径分隔符之类的东西保持相当的清醒。
edit0: 例如,我的文件系统的根目录有一个目录 /etc/init.d(或 w32 上的 C:\etc\init.d),我只想从元素 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.path.abspath('python.exe')在我的 Windows 机器上返回'C:\\Python27\\python.exe' -
我已经更新了问题以(希望)澄清我想要什么。
-
顺便说一句,相关的近乎重复:stackoverflow.com/questions/12041525/…
-
这些答案都不适合我。我如何加入
root_dir="C:/Users/folder"和filename="data/file1.txt"以获得绝对路径?在非 Windows 中使用os.path.join(root_dir, filename)很容易,但我在 Windows 中找不到解决方案。
标签: python path absolute-path