77 Stimmen

Dateipfad aus Variablen erstellen

Ich bin auf der Suche nach einigen Ratschlägen, wie man am besten einen Dateipfad mithilfe von Variablen generieren kann:

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

Gibt es für die Zeilen A und B, wie oben gezeigt, eine bessere Möglichkeit, einen Dateipfad zu erstellen, da dieser länger wird, je tiefer ich in den Verzeichnisbaum eindringe?

Ich stelle mir vor, dass eine bestehende integrierte Methode wie folgt verwendet wird:

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

die einen Pfad der Form /my/root/directory/in/here

Wenn es keine eingebaute Funktion gibt, werde ich einfach selbst eine schreiben.

Ich danke Ihnen für jeden Beitrag.

151voto

kennytm Punkte 488916

Ja, es gibt eine solche eingebaute Funktion: os.path.join .

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

34voto

nmichaels Punkte 47432

Sie benötigen die Funktion path.join() aus os.path.

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

Dies baut den Pfad mit os.sep auf (anstelle des weniger portablen '/' ) und tut dies (im Allgemeinen) effizienter als mit + .

Allerdings wird dadurch der Pfad nicht wirklich erstellt. Dazu müssen Sie etwas tun, was Sie in Ihrer Frage beschrieben haben. Sie könnten etwas schreiben wie:

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)

10voto

AlexandreS Punkte 595

Sie können auch einen objektorientierten Pfad verwenden mit pathlib (ab Python 3.4 als Standardbibliothek verfügbar):

from pathlib import Path

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X