连接路径 - 平台无关 - "/","\"

Jak*_* M. 74 python path

在python中我有变量base_dirfilename.我想将它们连接起来以获得fullpath.但在Windows下我应该使用\和POSIX /.

fullpath = "%s/%s" % ( base_dir, filename ) # for Linux
Run Code Online (Sandbox Code Playgroud)

如何使平台独立?

重复:与平台无关的文件路径?

Lev*_*von 123

你想为此使用os.path.join().

使用此而不是字符串连接等的强度是它知道各种操作系统特定的问题,例如路径分隔符.例子:

import os
Run Code Online (Sandbox Code Playgroud)

Windows 7下:

base_dir = r'c:\bla\bing'
filename = r'data.txt'

os.path.join(base_dir, filename)
'c:\\bla\\bing\\data.txt'
Run Code Online (Sandbox Code Playgroud)

Linux下:

base_dir = '/bla/bing'
filename = 'data.txt'

os.path.join(base_dir, filename)
'/bla/bing/data.txt'
Run Code Online (Sandbox Code Playgroud)

所述OS模块包含目录,路径操纵并找出OS特定信息许多有用的方法,如在经由路径中使用的分离器os.sep

  • 虽然,Windows也接受正斜杠. (3认同)

And*_*ark 24

用途os.path.join():

import os
fullpath = os.path.join(base_dir, filename)
Run Code Online (Sandbox Code Playgroud)

os.path中模块包含了所有的你应该需要独立于平台的路径操作方法,但如果你需要知道的路径分隔符是当前的平台,你可以使用什么os.sep.


Tob*_*oby 12

在这里挖掘一个老问题,但是在Python 3.4+上,您可以使用pathlib运算符

from pathlib import Path

# evaluates to ./src/cool-code/coolest-code.py on Mac
concatenated_path = Path("./src") / "cool-code\\coolest-code.py"
Run Code Online (Sandbox Code Playgroud)

os.path.join()您有幸运行新版本的Python时,它可能更具可读性。但是,如果必须在严格或遗留的环境中运行代码,则还需要权衡与旧版Python的兼容性。


var*_*unl 7

import os
path = os.path.join("foo", "bar")
path = os.path.join("foo", "bar", "alice", "bob") # More than 2 params allowed.
Run Code Online (Sandbox Code Playgroud)