Eu gostaria de usar o código a seguir para determinar se existe um caminho. O caminho que gostaria de verificar está sendo passado para o meu código via parâmetro em uma caixa de diálogo da ferramenta ArcMap 10.0. O tipo de dado dos parâmetros é folder, esse caminho da pasta está sendo passado para sys.argv [2] no meu código abaixo.
{import sys
import os
if os.path.exists("%s"): %(sys.argv[2])
pass
else:
#Do Something Magical}
Normalmente, eu não teria nenhum problema com esse script se estivesse declarando explicitamente o caminho da pasta. Por exemplo, qualquer um dos três seguintes funciona bem e faz o que eu preciso:
os.path.exists("C:\\Data\\Hardwar\\Folder"):
os.path.exists(r"C:\Data\Hardwar\Folder"):
os.path.exists("C:/Data/Hardwar/Folder"):
No código anterior, o que estou descobrindo é que, como o caminho ie ( C:\Data\Hardwar\Folder
) está sendo passado do meu parâmetro para sys.argv [2], a primeira letra após \ está sendo escapada e com razão.
Como formatar o caminho em sys.argv [2] para um formato de caminho aceitável em python?
fonte
arcpy.exists()
comando que pode ser mais bem reproduzido com nomes de arquivos e pastas ímpares queos.path.exists
.arcpy.GetParameterAsText(1)
vez desys.argv[2]
?Respostas:
Como você descobriu, os caminhos do Windows contêm uma única barra invertida, mas no Python uma única barra invertida é um caractere de escape .
Você tem poucas opções:
1) Você pode usar uma string não processada (
r"stringgoeshere"
) ouos.path.normpath()
, conforme detalhado nesta postagem do blog .2) Para que o Python entenda que uma string contém um caminho, você precisa usar barras invertidas duplas.
Portanto, seu caminho deve ser formatado da seguinte maneira:
Uma maneira alternativa simples de fazer isso no seu código seria atribuir
sys.argv[2]
a uma string e formatá-la a partir daí.fonte
Algo não corresponde à pergunta ou às respostas existentes. A barra invertida é apenas um caractere de escape para literais de string no código-fonte do Python, não no shell do Windows (que é o que o Python usa no Windows para analisar os argumentos da linha de comando).
Executando este script simples:
Em uma ferramenta de script do ArcGIS 10.0 com um único parâmetro de entrada do tipo Pasta, resulta em "True" sendo impresso para qualquer pasta existente.
fonte
Eu sinto que você pode estar complicando demais as coisas aqui. Por que você está lutando para passar o parâmetro de entrada usando a
%s
formatação de string? Dois exemplos de código de trabalho:Ou simplesmente:
E @ blah238 está certo. Se você estiver fazendo isso como uma ferramenta ArcMap Toolbox, você realmente deve estar usando
arpcy.GetParameter(AsText)
.fonte