Bestandspad maken van variabelen

Ik ben op zoek naar advies over de beste manier om een ​​bestandspad te genereren met behulp van variabelen, momenteel ziet mijn code er als volgt uit:

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.')

Is er voor de regels A en B, zoals hierboven weergegeven, een betere manier om een ​​bestandspad te maken, aangezien dit langer wordt naarmate ik dieper in de directorystructuur duik?

Ik overweeg een bestaande ingebouwde methode als volgt te gebruiken:

create_path(path, 'in', 'here')

het maken van een pad in de vorm /my/root/directory/in/here

Als er geen ingebouwde functie is, zal ik er zelf een schrijven.

Bedankt voor alle input.


Antwoord 1, autoriteit 100%

Ja, er is zo’n ingebouwde functie: os.path.join.

>>> import os.path
>>> os.path.join('/my/root/directory', 'in', 'here')
'/my/root/directory/in/here'

Antwoord 2, autoriteit 23%

U wilt de functie path.join() van os.path.

>>> from os import path
>>> path.join('foo', 'bar')
'foo/bar'

Dit bouwt je pad op met os.sep (in plaats van het minder draagbare '/') en doet het efficiënter (in het algemeen) dan met +.

Hiermee wordt echter niet echt het pad gemaakt. Daarvoor moet je iets doen zoals je in je vraag doet. Je zou zoiets kunnen schrijven als:

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)

Antwoord 3, autoriteit 7%

Je kunt ook een objectgeoriënteerd pad gebruiken met pathlib(beschikbaar als standaardbibliotheek vanaf Python 3.4):

from pathlib import Path
start_path = Path('/my/root/directory')
final_path = start_path / 'in' / 'here'

Other episodes