Найти / заменить двойные кавычки с помощью Python Parser из ArcGIS Field Calculator?

16

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

Этот расчет: Пример расчета

Результаты в этом:

провал

С этим сообщением об ошибке в диалоге результатов:

сообщение об ошибке

И я повторяю, я не положил их туда.

valveLondon
источник
1
Таким образом, вы копируете их с кавычками в своем тесте, вы уже пытались вырезать кавычки с чем-то вроде!testing![1:len(!testing!)-1]
Roy
Предоставленный вами фрагмент умирает с тем же сообщением.
valveLondon

Ответы:

16

Я обнаружил, что в 10.0 Field Calculator довольно странно.

Но мне удалось заставить его работать. Основная идея заключается в том, чтобы заключить имя поля в одинарные кавычки.

Пример. Предположим, у нас есть поля text1и text2. Вместо расчета поля text2с выражением !text1!, которое , вероятно , потерпит неудачу, попробуйте это: '!text1'. Как вы видите, я использую здесь одинарные кавычки.

Итак, вернемся к вашей задаче. Будет более понятно использовать код Pre-Logic Script:

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

Выражение будет:

calc('!text1!')

Я надеюсь, что это будет работать для вас.

Я не экспериментировал дальше, но думаю, что такое странное поведение происходит, потому что вычисление поля переводится в вызов инструмента ArcToolbox, CalculateField_managementа выражение предоставляется в качестве параметра к нему (возможно, дополнительно заключено в одинарные или двойные кавычки).

ОБНОВИТЬ:

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

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

Вот выражение, которое будет возвращать исходную строку, поддерживающую оба типа кавычек:

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

Для вашей задачи он может быть расширен до (без кода Pre-Logic Script):

'''!text1!'''[1:-1].replace('"', '')
Алекс Марков
источник
Ну, ты возродил мои надежды, но это не работает для меня. Ни '!testing!'
кодовый
Хм, это работало на моем 10.0sp4. Может быть, это потому, что где-то в вашей области есть на самом деле одинарные кавычки ... Вы рассматривали возможность использования UpdateCursor в скрипте Python?
Алексей Марков
2
Знаешь что? Вы правы, это работает. У меня не было моих 3 часов просыпания сока. Ты победил.
valveLondon
Мне удалось решить проблему с помощью одной цитаты. Проверьте мое обновление на ответ.
Алекс Марков
Код Pre-Logic Script прекрасно работал при использовании в сценарии - большое спасибо
meryloo
10

Если вы используете версию 10.1 и уверены, что хотите избавиться от каждого экземпляра двойных кавычек, вы можете использовать:

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

Если кто-нибудь знает, почему это работает в 10.1, а не в 10.0, мне было бы интересно.

Вот запись результатов моего бега.

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

TurboGus
источник
В чем тут фокус, твой скрипт не сработал?
artwork21
Это не работает Похоже, что должно, но это не так.
KiloGeo
Оба ваших поля текстовые правильно?
TurboGus
@Gus, Да поле это текст.
artwork21
2
Я не использую 10.1. Я использую 10.0 - та архаичная версия, которая оооочень 2011 года.
valveLondon
8

Вот не сценарий способ сделать это.

  1. Начните редактировать сессию на вашем слое.
  2. Откройте таблицу и выделите столбец поля.
  3. Выберите «Параметры таблицы» стрелку вниз и выберите «Найти и заменить».
  4. Выберите вкладку «Заменить» и введите «Найти что:» ", выберите «Заменить все» (дважды нажмите кнопку «Заменить все»).
artwork21
источник
Хотя я ценю возможность, я не только хочу заменить двойные кавычки, и я предпочел бы работать через сценарии.
valveLondon
3

Гибридный подход работал в моей системе:

'!testing!'.replace("\"","")
Аарон
источник
2

Я не пробовал это внутри Arc, но я смог удалить двойные кавычки из строки в Python IDE следующим (быстрым) способом:

aStr ='"test"'

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

print a2

Тест А2 печатает, без кавычек.

Тимоти Майкл
источник
Я понимаю, что это не поможет с частью «Найти» вашего вопроса ...
Тимоти Майкл
0

Привет, попробуйте использовать одинарные кавычки, как это! test! .replace ('"', '')

данго
источник
Привет, это не работает.
valveLondon
0

Я нашел это довольно легко со старой функцией VBScript: Replace ([testing],"""","")

Alex
источник