Saya ingin menggunakan kode berikut untuk menentukan apakah ada jalan. Jalur yang ingin saya periksa sedang diteruskan ke kode saya melalui parameter pada kotak dialog alat ArcMap 10.0. Tipe data parameter adalah folder, jalur folder ini diteruskan ke sys.argv [2] dalam kode saya di bawah ini.
{import sys
import os
if os.path.exists("%s"): %(sys.argv[2])
pass
else:
#Do Something Magical}
Biasanya saya tidak akan memiliki masalah dengan skrip ini jika saya secara eksplisit menyatakan path folder. Misalnya salah satu dari tiga berikut ini berfungsi dengan baik dan melakukan apa yang saya butuhkan:
os.path.exists("C:\\Data\\Hardwar\\Folder"):
os.path.exists(r"C:\Data\Hardwar\Folder"):
os.path.exists("C:/Data/Hardwar/Folder"):
Dalam kode sebelumnya apa yang saya temukan adalah bahwa sebagai path yaitu ( C:\Data\Hardwar\Folder
) sedang diteruskan dari parameter saya ke sys.argv [2] huruf pertama setelah \ sedang melarikan diri dan memang seharusnya begitu.
Bagaimana cara memformat path di sys.argv [2] ke format path yang dapat diterima python?
sumber
arcpy.exists()
perintah yang mungkin bisa bermain lebih baik dengan nama file dan folder aneh daripadaos.path.exists
.arcpy.GetParameterAsText(1)
bukansys.argv[2]
?Jawaban:
Seperti yang telah Anda temukan, jalur Windows berisi backslash tunggal, tetapi dalam Python backslash tunggal adalah karakter pelarian .
Anda punya beberapa pilihan:
1) Anda dapat menggunakan string mentah (
r"stringgoeshere"
), atauos.path.normpath()
, sebagaimana dirinci dalam posting blog ini .2) Agar Python memahami bahwa string berisi jalur, Anda perlu menggunakan garis miring terbalik ganda.
Jadi jalur Anda harus diformat seperti itu:
Cara alternatif sederhana untuk mencapai ini dalam kode Anda adalah dengan menetapkan
sys.argv[2]
ke string dan memformatnya dari sana.sumber
Sesuatu tidak cocok dengan pertanyaan atau jawaban yang ada. Backslash hanya karakter pelarian untuk string literal dalam kode sumber Python, bukan pada shell Windows (yang digunakan Python pada Windows untuk mengurai argumen baris perintah).
Menjalankan skrip sederhana ini:
Dari alat skrip ArcGIS 10.0 dengan parameter input tunggal dari tipe Folder, menghasilkan "True" yang dicetak untuk folder yang ada.
sumber
Saya merasa Anda mungkin terlalu rumit di sini. Mengapa Anda berjuang untuk melewati parameter input menggunakan
%s
pemformatan string? Dua contoh kode kerja:Atau sederhananya:
Dan @ blah238 benar. Jika Anda melakukan ini sebagai Alat ArcMap Toolbox, Anda harus benar-benar menggunakannya
arpcy.GetParameter(AsText)
.sumber