Saya memiliki tabel geodatabase dengan bidang yang saya coba hapus kembali karakter (baris baru). Saya menemukan posting ini ( Bagaimana saya bisa menghapus (chomp) baris baru dengan Python? ) Tentang bagaimana melakukannya, namun tidak berfungsi dalam kalkulator lapangan. Berikut ini cuplikan kode yang saya coba: Catatan karakter kembali bukan di akhir string .
!myField!.rstrip()
ATAU
!myField!.rstrip('\n')
ATAU
!myField!.rstrip('\r\n')
ATAU
!myField!.replace('\n', '')
000539 kesalahan yang diberikan untuk opsi ini:
Deskripsi Perhitungan yang digunakan oleh bidang Hitung atau alat Nilai Hitung tidak valid. Pesan kesalahan ini disediakan akan mencantumkan kesalahan Python spesifik.
Solusi Kode kesalahan ini mencakup sejumlah kesalahan Python:
Contoh kesalahan 1: exception.TypeError: tidak dapat menggabungkan objek 'str' dan 'int'. Di atas adalah kesalahan khusus Python. Perhitungan sedang mencoba untuk menambah atau menggabungkan string dan angka.
Contoh kesalahan 2: Bentuk bidang tidak valid @ jarak Di atas adalah kesalahan menggunakan objek geometri. Metode jarak bukanlah metode yang valid dari objek geometri.
Untuk masalah Python tertentu, bacalah bantuan Python eksternal untuk informasi lebih lanjut, atau bacalah bidang Hitung atau bantuan Nilai Hitung untuk informasi lebih lanjut tentang alat-alat ini.
ATAU
import os
def removeReturn(myField):
s = myField.rstrip(os.linesep)
return s
Adakah gagasan tentang cara menghapus karakter kembali menggunakan kalkulator bidang?
SyntaxError: EOL while scanning string literal
kesalahan?Jawaban:
Saya pikir ini hanyalah bug / batasan parser Python dengan kalkulator bidang / alat Hitung Bidang. Jika baris baru ditemukan dalam bidang teks, a
SyntaxError: EOL while scanning string literal
terjadi apa pun yang Anda coba.Saya bisa mereproduksi masalah di 10.1 SP1 dengan mengimpor file CSV berikut ke dalam file geodatabase, menambahkan bidang dan hanya mencoba untuk menyalin
Text
bidang ke bidang baru menggunakan Kalkulator Bidang dengan parser Python dan dan ekspresi!Text!
.Coba beralih ke parser VB, atau gunakan
UpdateCursor
dan hindari Kalkulator Bidang sepenuhnya.Masalah ini juga dibahas di forum ESRI, dengan kesimpulan yang sama:
Satu-satunya NIM relevan yang dapat saya temukan adalah ini:
sumber
Ada dua kemungkinan solusi yang menurut saya dapat diandalkan. Untuk beberapa alasan, CartoPac memungkinkan orang-orang untuk melakukan Pengembalian di bidang REMARKS tempat saya bekerja. Untuk menghilangkannya, solusi yang menurut saya paling berhasil adalah menggunakan Field Calculator.
Ubah Parser Anda menjadi Python. Masukkan yang berikut ini dalam Kode Naskah Pra-Logika:
Masukkan yang berikut ini di kotak teks berikutnya (yang ini bekerja pada bidang yang disebut REMARKS):
Ketika kereta Anda kembali dihapus, itu akan menambah ruang, -, dan ruang di antara setiap baris. Anda dapat memodifikasi "-" menjadi karakter atau rangkaian karakter yang berbeda jika diinginkan. Tapi saya menemukan ini bekerja paling baik untuk saya berdasarkan cara kru konstruksi saya memasukkan data. Lebih mudah untuk melakukan operasi Find / Replace jika ada pola karakter yang dapat dikenali yang memecah setiap carriage return, yang mereka gunakan di lapangan untuk menunjukkan atribut baru (meskipun seringkali merupakan atribut yang mereka bisa saja taruh di bidang yang tepat dan menyelamatkan saya sakit kepala di tempat pertama).
Jika Anda lebih suka menggunakan Konsol Python di ArcGIS, Anda dapat memodifikasi di atas agar berfungsi. Namun saya juga sudah mencoba ini dengan beberapa keberhasilan di Python Console:
Ganti "Aset \ Lasan" dengan nama fc yang sesuai dan ganti baris. PERBAIKAN dengan baris. (Masukkan nama bidang di sini)
Anda mungkin atau mungkin tidak perlu menjalankan jalur impor di bawah sebelum mencoba contoh kode di atas:
sumber
Pekerjaan untuk ini karena tabel kelas fitur saya berasal dari excel adalah dengan menggunakan perintah excel berikut:
metode untuk menghapus semua karakter baris kembali atau baru. Anda kemudian dapat bergabung atau mengimpor tabel ke dalam database GIS Anda.
sumber
Saya telah menggunakan pernyataan SQL untuk memilih karakter baris pertama. Di
Select By Attributes
jendela dialog:Anda harus menekan
Enter
setelah% pertama.sumber
MY_FIELD.strip()
bekerja, tetapi karena saya hanya memiliki 5 catatan, saya mengeditnya secara manual.!MY_FIELD![:-1]
- irisan string harus menghapus karakter baris baru (dengan asumsi tidak ada yang muncul setelah baris baru, yang tampaknya menjadi kasus OP) .!FieldName!.replace(chr(10), "").replace(chr(13), "")
Kalkulator lapangan agak bingung ketika harus keluar dari urutan seperti
\n
dan\t
. Cukup gunakan kode karakter mentah.sumber
SyntaxError: EOL while scanning string literal
dengan ini. VB parser berfungsi dengan baik.sumber
Saya pikir ini harus berfungsi sebagai Kode Skrip Pra-logika di Kalkulator Bidang - tetapi sayangnya sepertinya tidak. Saya tetap mempostingnya kalau-kalau itu memberi Anda pendekatan alternatif yang dapat Anda tweak untuk bekerja.
sumber
Coba bungkus
!field!
pernyataan Anda dalam ekspresi dengan tanda kutip dan initializer string mentah , misr"!field!"
.Coba
str(!field!)
juga.sumber
MYFIELD.replace(r"\n",""), but it doesn't see that I've escaped the newline character, it just fails with a
kesalahan EOL`.