Ich möchte den folgenden Code verwenden, um festzustellen, ob ein Pfad vorhanden ist. Der Pfad, den ich überprüfen möchte, wird über einen Parameter in einem ArcMap 10.0-Tooldialogfeld an meinen Code übergeben. Der Parameterdatentyp ist Ordner. Dieser Ordnerpfad wird in meinem Code unten an sys.argv [2] übergeben.
{import sys
import os
if os.path.exists("%s"): %(sys.argv[2])
pass
else:
#Do Something Magical}
Normalerweise hätte ich kein Problem mit diesem Skript, wenn ich den Ordnerpfad explizit angeben würde. Zum Beispiel funktioniert eine der folgenden drei gut und macht das, was ich brauche:
os.path.exists("C:\\Data\\Hardwar\\Folder"):
os.path.exists(r"C:\Data\Hardwar\Folder"):
os.path.exists("C:/Data/Hardwar/Folder"):
Im vorhergehenden Code stelle ich fest, dass beim C:\Data\Hardwar\Folder
Übergeben des Pfads ie ( ) von meinem Parameter an sys.argv [2] der erste Buchstabe nach \ zu Recht maskiert wird.
Wie formatiere ich den Pfad in sys.argv [2] in ein Python-akzeptables Pfadformat?
quelle
arcpy.exists()
Befehl, der mit ungeraden Datei- und Ordnernamen besser funktioniert alsos.path.exists
.arcpy.GetParameterAsText(1)
statt zu verwendensys.argv[2]
?Antworten:
Wie Sie festgestellt haben, enthalten Windows-Pfade einen einzelnen Backslash, in Python ist ein einzelner Backslash ein Escape-Zeichen .
Sie haben einige Möglichkeiten:
1) Sie können einen rohen String (
r"stringgoeshere"
) oderos.path.normpath()
, wie in diesem Blog-Beitrag beschrieben, verwenden .2) Damit Python versteht, dass eine Zeichenfolge einen Pfad enthält, müssen Sie doppelte Backslashes verwenden.
Ihr Pfad sollte also so formatiert sein:
Eine einfache Alternative, um dies in Ihrem Code zu erreichen, besteht darin
sys.argv[2]
, eine Zeichenfolge zuzuweisen und von dort aus zu formatieren.quelle
Etwas passt weder zur Frage noch zu den vorhandenen Antworten. Der Backslash ist nur ein Escape-Zeichen für Zeichenfolgenliterale im Python-Quellcode, nicht in der Windows-Shell (was Python unter Windows zum Parsen von Befehlszeilenargumenten verwendet).
Ausführen dieses einfachen Skripts:
In einem ArcGIS 10.0-Skriptwerkzeug mit einem einzelnen Eingabeparameter vom Typ Ordner wird "True" für jeden vorhandenen Ordner gedruckt.
quelle
Ich habe das Gefühl, dass Sie hier die Dinge nur zu kompliziert machen. Warum kämpfen Sie darum, den Eingabeparameter mithilfe der
%s
Zeichenfolgenformatierung zu übergeben? Zwei Beispiele für Arbeitscodes:Oder einfach:
Und @ blah238 ist richtig. Wenn Sie dies als ArcMap Toolbox-Tool ausführen, sollten Sie es wirklich verwenden
arpcy.GetParameter(AsText)
.quelle