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'