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

时间:2013-05-28 10:27:38

标签: python string path operating-system

我试图找出使用它是否更好:

os.path.join(str1, str2)

或:

str1 + os.sep + str2

使用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

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

由于

2 个答案:

答案 0 :(得分:16)

它就在文档中:

  

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

     

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

os.path.join做得更多:

>>> os.path.join("/home/", "/home/foo")
'/home/foo'
>>> "/home/" + os.sep + "/home/foo"
'/home///home/foo'

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

答案 1 :(得分:7)

os.path.join有多个参数:

import os
os.path.join('a', 'b', 'c')

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