2017-01-15 3 views
3

Angenommen ich eine Zeichenfolge, die eine Windows-Datei-Adresse halten, sagen wir mal,Basisnamen eines Windows-Pfad in Linux Get

local_address = "C:\\TEMP\\filename.txt" 

den Dateinamen von der Adresse abzurufen oben I

import os 
filename = os.path.basename(local_address)  

Einsatz in Fenster, wenn ich den Code ausführen die Ausgabe

>>> print filename 
filename.txt 

Aber wenn Sie den Code in linux läuft ich

>>> print filename 
C:\TEMP\filename.txt 

Der Grund ist (was ich denke ist), dass, wenn die Linux-Implementierung von Python Linux lokale Dateiadressformate erwartet und keine Ahnung von Windows-Adressen hat. Lassen Sie die Adresse manuell analysieren, gibt es andere Lösungen, um einheitliche Ergebnisse zu erhalten?

Antwort

6

Python haben mehrere Implementierungen von os.path Modul, und wenn Sie Glück haben, können Sie Ihre Python mit ntpath Modul ausgestattet werden:

>>> import ntpath 
>>> ntpath.basename(r'C:\TEMP\filename.txt') 
'filename.txt' 

Nach os.path Dokumentation:

Da verschiedene Betriebssysteme unterschiedliche Pfadnamen Konventionen haben, gibt es mehrere Versionen dieses Modul in der Standardbibliothek. Das Modul os.path ist immer das Pfadmodul, das für das Betriebssystem, auf dem Python ausgeführt wird, geeignet und daher für lokale Pfade verwendbar ist. Sie können die einzelnen Module jedoch auch importieren und verwenden, wenn Sie einen Pfad bearbeiten möchten, der immer in einem der verschiedenen Formate vorliegt. Sie alle haben die gleiche Schnittstelle:

  • posixpath für UNIX-Pfade
  • ntpath für Windows-Pfade
+0

Es gibt kein 'npath' Modul zum Importieren. Funktioniert derselbe Code sowohl unter Windows als auch unter Linux? –

+1

'ntpath', nicht' npath' –

1
  • Unter Windows ist die Datei Separator (os.sep) Backslash (\). Schrägstrich wird ebenfalls akzeptiert (Windows-Betriebssystemfunktionen akzeptieren dies)
  • Unter Linux ist der Dateitrenner (os.sep) Schrägstrich (/). Backslash wird nicht akzeptiert.

was os.path.basename(local_address.replace('\\',os.sep)) die Schrägstriche in Schrägstriche

drehen wäre funktionieren würde so basename sie verarbeiten kann (und es würde an den Fenstern auch arbeiten: Sie etwas von der gleichen Sache ersetzen würde)

+0

Sicher, aber es wird auf Windows nicht funktionieren. Ich muss es an beiden arbeiten. –

+0

wird es bei Windows funktionieren. Überprüfen Sie meine Bearbeitung. Der 'ntpath'-Trick der anderen Antwort ist wahrscheinlich besser. –