Знайти / замінити подвійні лапки за допомогою Python Parser калькулятора поля ArcGIS?


16

Я намагаюся використовувати калькулятор поля (ArcMap 10.0), щоб викреслити подвійні лапки в адресному полі (я не вводив їх туди, повірте). Я спробував багато заборон, але все ще не можу навіть зійти з місця з розрахунком. так, обидва поля є рядковими, і обидва мають прийнятну довжину.

Цей розрахунок: Зразок розрахунку

Результати в цьому:

невдача

За допомогою цього повідомлення про помилку в діалоговому вікні "Результати":

повідомлення про помилку

І повторююсь, я їх там не помістив.


1
Отже, ви копіюєте їх із цитатами у своєму тесті, чи ви вже намагалися позбавити цитати чимось на кшталт!testing![1:len(!testing!)-1]
Рой,

Наданий вами фрагмент вмирає з тим же повідомленням.
клапан Лондон

Відповіді:


16

Я виявив, що в 10.0 Field Calculator досить дивно.

Але мені вдалося змусити його працювати. Основна ідея - укласти ім'я поля єдиними лапками.

Приклад. нехай у нас є поля text1і text2. Замість розрахунку поля text2з виразом !text1!, яке , ймовірно , зазнає невдачі, спробуйте це: '!text1'. Як ви бачите, тут я використовую одинарні цитати.

Отже, поверніться до свого завдання. Зрозумілішим буде використання до-логічного коду сценарію:

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

Вираз буде таким:

calc('!text1!')

Сподіваюся, це спрацює для вас.

Я не експериментував далі, але думаю, що така дивна поведінка трапляється, тому що обчислення поля переводиться на виклик інструменту ArcToolbox CalculateField_managementі вираз надається як параметр для нього (ймовірно, додатково додається до одиничних або подвійних лапок).

ОНОВЛЕННЯ:

Моє попереднє рішення не вдасться у випадку, якщо у значеннях поля є одиничні лапки text1.

Тепер мені вдалося змусити його працювати як у випадку, коли в атрибуті є знаки, так 'і "(одинарні та подвійні лапки) text1.

Ось вираз, який поверне початковий рядок, підтримуючи обидва типи цитат:

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

Для вашого завдання його можна поширити на (без попереднього логічного коду сценарію):

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

Що ж, ти сподівався на мене, але це не працює для мене. Ні кодовий блок, ні прямий вгору'!testing!'
клапан Лондон

Гм, він працював на моєму 10.0sp4. Можливо, це тому, що десь у вашому полі є насправді єдина цитата ... Чи ви думали про використання UpdateCursor в python-скрипті?
Олексій Марков

2
Знаєш, що? ти маєш рацію, це працює. У мене не було 3:00 прокидання соку. Ти виграв.
клапан Лондон

Мені вдалося вирішити проблему однією цитатою. Перевірте моє оновлення відповіді.
Олексій Марков

Код попереднього логічного сценарію
справно

10

Якщо ви використовуєте версію 10.1 і ви впевнені, що хочете позбутися кожного екземпляра подвійних лапок, які ви можете використовувати:

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

Якщо хтось знає, чому це працює в 10.1, а не в 10.0, мені було б цікаво.

Ось результати з мого запуску.

введіть тут опис зображення


Який тут магічний трюк, ваш сценарій не спрацював?
художній твір21

Це не працює. Схоже, як слід, але це не так.
KiloGeo

В обох полях текст правильний?
TurboGus

@Gus, так, це текст.
художній твір21

2
Я не використовую 10.1. Я використовую 10.0 - ту архаїчну версію, яка є sooooo 2011.
valveLondon

8

Ось не сценарій, як це зробити.

  1. Почніть редагувати сеанс на вашому шарі.
  2. Відкрийте таблицю та виділіть стовпчик поля.
  3. Виберіть стрілку спадного меню Параметри таблиці та виберіть Знайти та замінити.
  4. Виберіть вкладку Замінити та введіть Знайти що:, "виберіть Замінити все (вам доведеться двічі натиснути кнопку Замінити все).

в той час як я ціную можливість, я не просто хочу замінити подвійні лапки, а я б швидше працював за допомогою сценаріїв.
клапан Лондон

3

Гібридний підхід працював у моїй системі:

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

2

Я не пробував цього всередині Arc, але мені вдалося видалити подвійні лапки з рядка в Python IDE цим (швидким) способом:

aStr ='"test"'

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

print a2

a2 друкує тест, без лапок.


Я усвідомлюю, що це не допомагає в частині "Знайти" вашого питання ...
Тимофій Майкл


0

Зі старою функцією VBScript я вважав це досить легко: Replace ([testing],"""","")

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.