Create file path from variables
PythonPathPython Problem Overview
I am looking for some advice as to the best way to generate a file path using variables, currently my code looks similar to the following:
path = /my/root/directory
for x in list_of_vars:
if os.path.isdir(path + '/' + x): # line A
print(x + ' exists.')
else:
os.mkdir(path + '/' + x) # line B
print(x + ' created.')
For lines A and B as shown above, is there a better way to create a file path as this will become longer the deeper I delve into the directory tree?
I envisage an existing built-in method to be used as follows:
create_path(path, 'in', 'here')
producing a path of the form /my/root/directory/in/here
If there is no built in function I will just write myself one.
Thank you for any input.
Python Solutions
Solution 1 - Python
Yes there is such a built-in function: os.path.join
.
>>> import os.path
>>> os.path.join('/my/root/directory', 'in', 'here')
'/my/root/directory/in/here'
Solution 2 - Python
You want the path.join() function from os.path.
>>> from os import path
>>> path.join('foo', 'bar')
'foo/bar'
This builds your path with os.sep (instead of the less portable '/'
) and does it more efficiently (in general) than using +
.
However, this won't actually create the path. For that, you have to do something like what you do in your question. You could write something like:
start_path = '/my/root/directory'
final_path = os.join(start_path, *list_of_vars)
if not os.path.isdir(final_path):
os.makedirs (final_path)
Solution 3 - Python
You can also use an object-oriented path with pathlib
(available as a standard library as of Python 3.4):
from pathlib import Path
start_path = Path('/my/root/directory')
final_path = start_path / 'in' / 'here'