2011-01-07 11 views
0

Aus der Dokumentation:Python os Modulpfad Funktionen

os.path.realpath(path) 
Return the canonical path of the specified filename, eliminating any 
symbolic links encountered in the path (if they are supported by the 
operating system). 

Wenn ich rufe diese mit dem Namen eines vorhandenen Datei, bekomme ich den Weg dorthin: /home/myhome/myproject.

Wenn ich dies mit einem 'nonsense.xxx' String Argument aufrufen, bekomme ich immer noch einen Pfad zu /home/myhome/myproject/nonsense.xxx. Dies ist ein wenig inkonsistent, weil es so aussieht, als sei nonsense.xxx ein Verzeichnis und keine Datei (obwohl es keines ist: es existiert nicht).

Wenn ich dies mit einem Null-String-Dateinamen aufrufen, bekomme ich immer noch einen Pfad zu /home/myhome/myproject.

Wie kann ich dieses Verhalten erklären, wenn die Dokumentation so wenig über realpath() sagt? (Ich benutze Python 2.5.)

Edit: Jemand schlug eine Möglichkeit vor, zu testen, ob Dateien existieren. Es geht mir nicht darum zu testen, ob Dateien existieren. Es geht mir darum, das Verhalten zu erklären.

Antwort

2

os.path ist nicht daran interessiert, ob die Dateien existieren oder nicht. Es geht nur darum, Wege zu konstruieren.

RealPath eliminiert bekannte Symlinks aus der Gleichung, aber Verzeichnisse, die nicht existieren, werden unabhängig davon als gültige Elemente eines Pfades angenommen.

+1

Das os.path doc sagt: "Dieses Modul implementiert einige nützliche Funktionen für Pfadnamen". Es besagt nicht, dass os.path.realpath() einen Pfad zurückgibt, unabhängig von dem Müll, den Sie senden. Aber das scheint es zu sein. – H2ONaCl

+0

@broiyan: Ihre Erwartungen werden Ihnen viel mehr Kummer verursachen, wenn Sie die Unausgesprochenen annehmen. –

+0

Ein Pfadnamen impliziert nicht, dass es sich um einen Pfad zu einer vorhandenen Datei handelt. Nur dass es ein gültiger Pfad ist. – richo

0

Legen Sie einen Test wie "os.path.isfile (x)", "x ist nicht None" und "os.path.isdir (x)" vor dem Aufruf?

2

Anstatt zu raten, lesen Sie einfach den Code! Es ist da in Ihrer Python-Installation. Oder durchsuchen Sie here, es sind nur 14 Zeilen minus Kommentare.