Tìm / Thay thế Dấu ngoặc kép bằng Python Parser của ArcGIS Field Calculator?


16

Tôi đang cố gắng sử dụng Máy tính trường (ArcMap 10.0) để loại bỏ dấu ngoặc kép trong trường địa chỉ (tôi không đặt chúng ở đó, tin tôi đi). Tôi đã thử nhiều câu thần chú nhưng vẫn không thể lên khỏi mặt đất bằng một phép tính. có, cả hai trường là chuỗi và cả hai đều có độ dài chấp nhận được.

Tính toán này: Tính toán mẫu

Kết quả trong việc này:

Thất bại

Với thông báo lỗi này trong hộp thoại Kết quả:

thông báo lỗi

Và tôi nhắc lại, tôi đã không đặt chúng ở đó.


1
Vì vậy, bạn đang sao chép chúng với các trích dẫn trong bài kiểm tra của mình, bạn đã thử tước các trích dẫn bằng một cái gì đó như!testing![1:len(!testing!)-1]
Roy

Đoạn mã bạn cung cấp chết với cùng một thông điệp.
vanLondon

Câu trả lời:


16

Tôi đã thấy rằng trong 10.0 Field Calculator khá kỳ lạ.

Nhưng tôi đã xoay sở để làm cho nó hoạt động. Ý tưởng chính là kèm theo tên trường với dấu ngoặc đơn.

Thí dụ. giả sử chúng ta có các trường text1text2. Thay vì tính toán trường text2với biểu thức !text1!, có thể sẽ thất bại, hãy thử trường này : '!text1'. Như bạn thấy tôi đang sử dụng dấu ngoặc đơn ở đây.

Vì vậy, trở lại với nhiệm vụ của bạn. Sẽ rõ ràng hơn khi sử dụng Mã tập lệnh tiền logic:

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

Biểu hiện sẽ là:

calc('!text1!')

Tôi hy vọng nó sẽ làm việc cho bạn.

Tôi chưa thử nghiệm thêm nhưng tôi nghĩ rằng hành vi kỳ lạ như vậy xảy ra do tính toán trường được dịch sang lệnh gọi đến công cụ ArcToolbox CalculateField_managementvà biểu thức được cung cấp dưới dạng tham số cho nó (có thể kèm theo dấu ngoặc đơn hoặc dấu ngoặc kép).

CẬP NHẬT:

Giải pháp trước đây của tôi sẽ thất bại trong trường hợp nếu có dấu ngoặc đơn trong các giá trị của trường text1.

Bây giờ tôi đã quản lý để làm cho nó hoạt động cả trong trường hợp khi có ký tự '"(dấu ngoặc đơn và dấu ngoặc kép) bên trong bất kỳ giá trị nào trong thuộc tính text1.

Đây là biểu thức, sẽ trả về chuỗi gốc, hỗ trợ cả hai loại dấu ngoặc kép:

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

Đối với nhiệm vụ của bạn, nó có thể được mở rộng thành (không có Mã tập lệnh tiền logic):

'''!text1!'''[1:-1].replace('"', '')

Vâng, bạn có hy vọng của tôi, nhưng điều đó không làm việc cho tôi. Cả codeblock cũng không phải là thẳng lên'!testing!'
vanLondon

Hừm, nó hoạt động trên 10.0sp4 của tôi. Có thể là bởi vì ở đâu đó trong lĩnh vực của bạn thực sự có một trích dẫn duy nhất ... Bạn đã cân nhắc sử dụng UpdateCthon trong tập lệnh python chưa?
Alex Markov

2
Bạn biết gì? bạn nói đúng, nó hoạt động. Tôi đã không uống nước trái cây lúc 3:00. Bạn thắng.
vanLondon

Tôi đã quản lý để giải quyết vấn đề với một trích dẫn duy nhất. Kiểm tra cập nhật của tôi để trả lời.
Alex Markov

Mã Script Pre-Logic hoạt động tốt khi được sử dụng trong một tập lệnh - cảm ơn rất nhiều
meryloo

10

Nếu bạn đang sử dụng phiên bản 10.1 và bạn chắc chắn muốn thoát khỏi mọi trường hợp trích dẫn kép bạn có thể sử dụng:

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

Nếu bất cứ ai biết tại sao điều này hoạt động trong 10.1 và không 10.0 tôi sẽ quan tâm.

Đây là mục kết quả từ chạy của tôi.

nhập mô tả hình ảnh ở đây


Trò ảo thuật ở đây là gì, kịch bản của bạn không hoạt động?
nghệ thuật21

Điều này không hoạt động. Có vẻ như nó nên, nhưng nó không.
KiloGeo

Cả hai lĩnh vực của bạn là văn bản chính xác?
TurboGus

@Gus, Có trường là văn bản.
nghệ thuật21

2
Tôi không sử dụng 10.1. Tôi đang sử dụng 10.0 - phiên bản cổ xưa đó là sooooo 2011.
vanLondon

8

Đây là một cách không kịch bản để làm điều đó.

  1. Bắt đầu chỉnh sửa phiên trên lớp của bạn.
  2. Mở bảng và tô sáng cột trường.
  3. Chọn tùy chọn Bảng thả xuống mũi tên và chọn Tìm & Thay thế.
  4. Chọn tab Thay thế và nhập Tìm gì : ", chọn Thay thế tất cả (bạn sẽ phải nhấp vào nút Thay thế Tất cả hai lần).

trong khi tôi đánh giá cao khả năng này, tôi không chỉ muốn thay thế các trích dẫn kép và tôi muốn làm việc thông qua kịch bản.
vanLondon

3

Một cách tiếp cận lai làm việc trên hệ thống của tôi:

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

2

Tôi đã không thử điều này bên trong Arc, nhưng tôi đã có thể xóa dấu ngoặc kép khỏi chuỗi trong IDE Python theo cách (nhanh chóng) này:

aStr ='"test"'

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

print a2

a2 in thử, không có dấu ngoặc kép.


Tôi nhận ra điều này không giúp ích gì cho phần 'Tìm' trong câu hỏi của bạn ...
Timothy Michael

0

xin chào hãy thử sử dụng các trích dẫn đơn như thế này! test! .replace ('"', '')


Xin chào, điều này không hoạt động.
vanLondon

0

Tôi thấy nó khá dễ dàng với Hàm VBScript cũ: Replace ([testing],"""","")

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.