I am trying to figure out if it is better to use:
os.path.join(str1, str2)
or:
str1 + os.sep + str2
Profiling with timeit
I found that, as expected, concatenation is faster:
%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
So my question is, since concatenation is also shorter, is there a reason to use os.path.join(()
?
Thanks
It's right there in the documentation:
os.path.join(path1[, path2[, ...]])
Join one or more path components intelligently. If any component is an absolute path, all previous components (on Windows, including the previous drive letter, if there was one) are thrown away, and joining continues. The return value is the concatenation of
path1
, and optionallypath2
, etc., with exactly one directory separator (os.sep
) following each non-empty part except the last. (This means that an empty last part will result in a path that ends with a separator.) Note that on Windows, since there is a current directory for each drive,os.path.join("c:", "foo")
represents a path relative to the current directory on driveC:
(c:foo
), notc:\foo
.
os.path.join
does much more:
>>> os.path.join("/home/", "/home/foo")
'/home/foo'
>>> "/home/" + os.sep + "/home/foo"
'/home///home/foo'
You will never have a situation where os.path.join
is the bottleneck of your program, so use it, it's much more readable too.
os.path.join
takes multiple arguments:
import os
os.path.join('a', 'b', 'c')
This will become rather long with concatenation for many path parts.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With