Je voudrais utiliser le code suivant pour déterminer si un chemin existe. Le chemin que je voudrais vérifier est transmis à mon code via un paramètre dans une boîte de dialogue d'outil ArcMap 10.0. Le type de données des paramètres est dossier, ce chemin de dossier est transmis à sys.argv [2] dans mon code ci-dessous.
{import sys
import os
if os.path.exists("%s"): %(sys.argv[2])
pass
else:
#Do Something Magical}
Normalement, je n'aurais aucun problème avec ce script si j'indiquais explicitement le chemin du dossier. Par exemple, l'un des trois suivants fonctionne bien et fait ce dont j'ai besoin:
os.path.exists("C:\\Data\\Hardwar\\Folder"):
os.path.exists(r"C:\Data\Hardwar\Folder"):
os.path.exists("C:/Data/Hardwar/Folder"):
Dans le code précédent, ce que je trouve, c'est que lorsque le chemin ie ( C:\Data\Hardwar\Folder
) est passé de mon paramètre à sys.argv [2], la première lettre après \ est échappée et à juste titre.
Comment formater le chemin d'accès dans sys.argv [2] vers un format de chemin d'accès python acceptable?
la source
arcpy.exists()
commande qui peut jouer plus bien avec des noms de fichiers et de dossiers impairs queos.path.exists
.arcpy.GetParameterAsText(1)
au lieu desys.argv[2]
?Réponses:
Comme vous l'avez découvert, les chemins d'accès Windows contiennent une seule barre oblique inverse, mais en Python, une seule barre oblique inverse est un caractère d'échappement .
Vous avez quelques options:
1) Vous pouvez utiliser une chaîne brute (
r"stringgoeshere"
) ouos.path.normpath()
, comme détaillé dans cet article de blog .2) Pour que Python comprenne qu'une chaîne contient un chemin, vous devez utiliser des barres obliques inverses doubles.
Votre chemin doit donc être formaté comme tel:
Une autre façon simple d'accomplir cela dans votre code serait d'attribuer
sys.argv[2]
à une chaîne et de la formater à partir de là.la source
Quelque chose ne correspond ni à la question ni aux réponses existantes. La barre oblique inverse est uniquement un caractère d'échappement pour les littéraux de chaîne dans le code source Python, pas sur le shell Windows (qui est ce que Python utilise sous Windows pour analyser les arguments de la ligne de commande).
Exécution de ce script simple:
À partir d'un outil de script ArcGIS 10.0 avec un seul paramètre d'entrée de type Dossier, "True" est imprimé pour tout dossier existant.
la source
J'ai l'impression que vous compliquez peut-être trop les choses ici. Pourquoi vous battez-vous pour passer le paramètre d'entrée en utilisant le
%s
formatage des chaînes? Deux exemples de code de travail:Ou simplement:
Et @ blah238 a raison. Si vous faites cela en tant qu'outil ArcMap Toolbox, vous devriez vraiment l'utiliser
arpcy.GetParameter(AsText)
.la source