2010-04-18 11 views
9

Ich habe mehrere Skripte, die einen Verzeichnisnamen als Eingabe nehmen, und mein Programm erstellt Dateien in diesen Verzeichnissen. Manchmal möchte ich den Basisnamen eines dem Programm übergebenen Verzeichnisses nehmen und damit verschiedene Dateien im Verzeichnis erstellen. Zum BeispielElegante Möglichkeit, Basisname des Verzeichnisses in Python zu nehmen?

# directory name given by user via command-line 
output_dir = "..." # obtained by OptParser, for example 
my_filename = output_dir + '/' + os.path.basename(output_dir) + '.my_program_output' 
# write stuff to my_filename 

Das Problem ist, dass, wenn der Benutzer einen Verzeichnisnamen mit einem Schrägstrich gibt, dann wird os.path.basename die leere Zeichenfolge zurück, die nicht das, was ich will. Was ist der eleganteste Weg, um mit diesen Schrägstrich-/Schrägstrich-Problemen in Python umzugehen? Ich weiß, dass ich am Ende von output_dir manuell nach dem Schrägstrich suchen und es entfernen kann, wenn es da ist, aber es scheint, dass es einen besseren Weg geben sollte. Ist da?

Ist es auch möglich, Zeichen '/' manuell hinzuzufügen? Z.B. output_dir + '/' os.path.basename() oder gibt es eine allgemeinere Möglichkeit, Pfade aufzubauen?

Danke.

Antwort

15

Um mit Ihrem "Schrägstrich" (und anderen Problemen!) Fertig zu werden, bereinigen Sie die Benutzereingabe mit os.path.normpath().

Pfade zu erstellen, verwenden os.path.join()

1

Manuelles Erstellen von Pfaden ist eine schlechte Idee für die Portabilität; Es wird unter Windows brechen. Sie sollten os.path.sep verwenden.

Wie für Ihre erste Frage ist die Verwendung von os.path.join die richtige Idee.

+1

„“ „es wird auf Windows brechen“ „“: Einschließlich Schrägstriche brechen wird nur, wenn Sie es als Teil eines Befehls zum Beispiel ernähren 'os.system()'; Der DOS-Befehlsparser versteht nur umgekehrte Schrägstriche. Füttern es z. open() ist ganz OK. Wenn der erstellte Pfad jedoch jemals einem Windows-Benutzer oder Administrator angezeigt werden soll, sollten Sie sich auf eine Menge Flak gefasst machen :-) –

7

Verwenden Sie os.path.join() zum Erstellen von Pfaden. Zum Beispiel:

>>> import os.path 
>>> path = 'foo/bar' 
>>> os.path.join(path, 'filename') 
'foo/bar/filename' 
>>> path = 'foo/bar/' 
>>> os.path.join(path, 'filename') 
'foo/bar/filename' 
1

die Wege zu bauen, ohne Schreiben schlitzt es besser ist, zu verwenden:

os.path.join(dir, subdir, file) 

wenn Sie Separatoren hinzufügen möchten oder den Separator independly des Os zu bekommen, dann verwenden

os.sep 
+0

Wie OP sagte, ist das Problem, dass, wenn d "mydir" ist, dies eine leere Zeichenfolge zurückgeben würde. –

+0

@Ofri: der entsprechende Abschnitt wurde eliminiert. – joaquin

2

Sie sollten os.path.join() verwenden, um Pfade zusammenzufügen.

Verwendung

os.path.dirname(os.path.join(output_dir,'')) 

dirname zu extrahieren, während ein Schrägstrich hinzufügen, wenn es weggelassen wurde.

Verwandte Themen