Cari / Ganti Kutipan Ganda menggunakan Python Parser dari ArcGIS Field Calculator?

16

Saya mencoba menggunakan Field Calculator (ArcMap 10.0) untuk menghapus tanda kutip ganda di bidang alamat (saya tidak meletakkannya di sana, percayalah). Saya sudah mencoba banyak mantera, tetapi saya masih belum bisa menyelesaikannya dengan perhitungan. ya, kedua bidang adalah string, dan keduanya panjangnya dapat diterima.

Perhitungan ini: Perhitungan sampel

Hasil dalam ini:

gagal

Dengan pesan kesalahan ini di dialog Hasil:

pesan eror

Dan saya ulangi, saya tidak meletakkannya di sana.

katup London
sumber
1
Jadi Anda menyalinnya dengan tanda kutip dalam tes Anda, apakah Anda sudah mencoba menghapus tanda kutip dengan sesuatu seperti!testing![1:len(!testing!)-1]
Roy
Cuplikan yang Anda berikan mati dengan pesan yang sama.
valveLondon

Jawaban:

16

Saya telah menemukan bahwa di 10.0 Field Calculator cukup aneh.

Tapi saya sudah berhasil membuatnya bekerja. Gagasan utamanya adalah melampirkan nama bidang dengan tanda kutip tunggal.

Contoh. misalkan kita punya ladang text1dan text2. Daripada Menghitung lapangan text2dengan ekspresi !text1!, yang mungkin akan gagal, mencoba yang satu ini: '!text1'. Seperti yang Anda lihat saya menggunakan tanda kutip tunggal di sini.

Jadi, kembali ke tugasmu. Akan lebih jelas untuk menggunakan Kode Naskah Pra-Logika:

def calc(value):
    return value.replace('"', '')

Ekspresi akan menjadi:

calc('!text1!')

Saya harap ini akan berhasil untuk Anda.

Saya belum bereksperimen lebih jauh tapi saya pikir perilaku aneh seperti itu terjadi karena perhitungan bidang diterjemahkan ke dalam panggilan ke alat ArcToolbox CalculateField_managementdan ekspresi disediakan sebagai parameter untuk itu (mungkin juga disertai dengan tanda kutip tunggal atau ganda).

MEMPERBARUI:

Solusi saya sebelumnya akan gagal jika ada tanda kutip tunggal dalam nilai-nilai bidang text1.

Sekarang saya telah berhasil membuatnya bekerja baik dalam kasus ketika ada karakter 'dan "(tanda kutip tunggal dan ganda) di dalam nilai apa pun di atribut text1.

Inilah ekspresi, yang akan mengembalikan string asli, mendukung kedua jenis kutipan:

'''!text1!'''[1:-1]

Untuk tugas Anda, dapat diperluas ke (tanpa Kode Skrip Pra-Logika):

'''!text1!'''[1:-1].replace('"', '')
Alex Markov
sumber
Ya, harapan saya naik, tetapi itu tidak berhasil bagi saya. Baik codeblock maupun straight up'!testing!'
valveLondon
Hm, itu berhasil pada 10.0sp4 saya. Mungkin itu karena di suatu tempat di bidang Anda sebenarnya ada satu kutipan ... Sudahkah Anda mempertimbangkan untuk menggunakan UpdateCursor dalam skrip python?
Alex Markov
2
Kamu tahu apa? Anda benar, itu berhasil. Saya belum mendapatkan jus bangun jam 3:00. Kamu menang.
valveLondon
Saya telah berhasil menyelesaikan masalah dengan satu kutipan. Periksa pembaruan saya untuk jawabannya.
Alex Markov
Kode Naskah Pra-Logika berfungsi dengan baik bila digunakan dalam skrip - terima kasih banyak
meryloo
10

Jika Anda menggunakan versi 10.1 dan Anda yakin ingin menyingkirkan setiap contoh tanda kutip ganda yang dapat Anda gunakan:

!testing!.replace("\"","")

Jika ada yang tahu mengapa ini bekerja di 10.1 dan bukan 10.0 saya akan tertarik.

Ini adalah entri hasil dari proses saya.

masukkan deskripsi gambar di sini

TurboGus
sumber
Apa trik sulap di sini, skrip Anda tidak berfungsi?
artwork21
Ini tidak berhasil. Sepertinya memang harus, tetapi tidak.
KiloGeo
Kedua bidang Anda adalah teks yang benar?
TurboGus
@ Ya, bidang Ya adalah teks.
artwork21
2
Saya tidak menggunakan 10.1. Saya menggunakan 10.0 - versi kuno yang sooooo 2011.
valveLondon
8

Berikut ini cara non skrip untuk melakukannya.

  1. Mulai sesi edit pada layer Anda.
  2. Buka tabel dan sorot kolom bidang.
  3. Pilih panah turun Opsi Tabel dan pilih Cari & Ganti.
  4. Pilih tab Ganti dan masukkan Temukan apa : ", pilih Ganti semua (Anda harus mengklik tombol Ganti Semua dua kali).
artwork21
sumber
sementara saya menghargai kemungkinannya, saya tidak hanya ingin mengganti tanda kutip ganda dan saya lebih suka bekerja melalui skrip.
valveLondon
3

Pendekatan hybrid bekerja pada sistem saya:

'!testing!'.replace("\"","")
Harun
sumber
2

Saya belum pernah mencoba ini di dalam Arc, tetapi saya dapat menghapus tanda kutip ganda dari sebuah string dalam IDE Python dengan cara (cepat) ini:

aStr ='"test"'

a1 = aStr.lstrip('"')
a2 = a1.rstrip('"')

print a2

tes cetak a2, tanpa tanda kutip.

Timothy Michael
sumber
Saya menyadari ini tidak membantu dengan bagian 'Temukan' dari pertanyaan Anda ...
Timothy Michael
0

hai coba gunakan tanda kutip tunggal seperti ini! test! .replace ('"', '')

dango
sumber
Hai, ini tidak berfungsi.
valveLondon
0

Saya merasa cukup mudah dengan Fungsi VBScript lama: Replace ([testing],"""","")

Alex
sumber