" os.path.join()"和" os.sep"?为什么" os.sep"比#os; os.path.join()"更快?

时间:2018-02-09 08:05:18

标签: python python-3.x

我通常使用" os.path.join()"当我连接路径时,我很少使用" os.sep"。 但我找到了" os.sep"比#os; os.path.join()"更快?

我的测试代码:

import os
import time

a = 'E:\\video'
b = 'image'
c = '0001.jpg'
start = time.clock()
d = os.path.join(a,b,c)
end = time.clock()
print("%f " % (end - start)) #0.000011
print(d) #E:\video\image\0001.jpg
start = time.clock()
e = a+os.sep+b+os.sep+c
end = time.clock()
print("%f " % (end - start)) #0.000001 
print(e) #E:\video\image\0001.jpg

结果:

enter image description here

2 个答案:

答案 0 :(得分:2)

你可以自己通过reading the source (windows version)回答这个问题 - 甚至只是文件FWIW:

  

智能地加入一个或多个路径组件。返回值是   路径和*路径的任何成员的串联恰好是一个   除了之外的每个非空部分之后的目录分隔符(os.sep)   最后,意味着结果只会在最后一个分隔符中结束   部分是空的。如果组件是绝对路径,则以前都是   组件被丢弃,加入继续绝对   路径组件。

     

在Windows上,绝对路径时不会重置驱动器号   遇到组件(例如,r' \ foo')。如果组件包含   驱动器号,所有以前的组件都扔掉了驱动器   信被重置。请注意,因为每个都有一个当前目录   drive,os.path.join(" c:"," foo")表示相对于   驱动器C上的当前目录:(c:foo),而不是c:\ foo。

正如您所看到的,os.path.join()

答案 1 :(得分:0)

根据os.path的python官方文档说:

  

由于不同的操作系统具有不同的路径名   约定,标准中有这个模块的几个版本   图书馆。 os.path模块始终是适合的路径模块   操作系统Python正在运行,因此可用于本地   路径。

我们可以看到它适用于os独立路径名约定,必须进行额外的检查,比如确定操作系统等,这是os.path.join所需时间的原因(a ,b,c)致电。

另外一个+ os.sep + b + os.sep + c只是一个简单的分隔符,它不执行os.path这样的操作。