使用os.path.join和os.sep连接之间的差异

gc5*_*gc5 10 python string operating-system path

我想弄清楚它是否更好用:

os.path.join(str1, str2)
Run Code Online (Sandbox Code Playgroud)

要么:

str1 + os.sep + str2
Run Code Online (Sandbox Code Playgroud)

绘制与timeit我发现,正如所料,串联更快:

%timeit 'playground' + os.sep + 'Text'
10000000 loops, best of 3: 139 ns per loop

%timeit os.path.join('playground', 'Text')
1000000 loops, best of 3: 830 ns per loop
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,由于连接也更短,是否有理由使用os.path.join(()

谢谢

jam*_*lak 17

它就在文档中:

os.path.join(path1[, path2[, ...]])

智能地加入一个或多个路径组件.如果任何组件是绝对路径,则所有以前的组件(在Windows上,包括之前的驱动器号,如果有的话)都将被丢弃,并继续加入.返回值是串联path1和(可选path2)等,在os.sep除了最后一个之外的每个非空部分之后只有一个目录separator().(这意味着空的最后一个部分将导致以分隔符结束的路径.)请注意,在Windows上,由于每个驱动器都有一个当前目录,因此os.path.join("c:", "foo")表示相对于drive C:(c:foo)上当前目录的路径,而不是c:\foo.

os.path.join 做得更多:

>>> os.path.join("/home/", "/home/foo")
'/home/foo'
>>> "/home/" + os.sep + "/home/foo"
'/home///home/foo'
Run Code Online (Sandbox Code Playgroud)

你永远不会遇到os.path.join程序瓶颈的情况,所以使用它,它也更具可读性.


Mik*_*ler 7

os.path.join 采用多个参数:

import os
os.path.join('a', 'b', 'c')
Run Code Online (Sandbox Code Playgroud)

对于许多路径部分,这将变得相当长.