У меня есть таблица базы геоданных с полем, которое я пытаюсь удалить возвращаемые символы (новая строка). Я нашел этот пост ( Как я могу удалить (обжать) новую строку в Python? ) О том, как это сделать, однако он не работает в полевом калькуляторе. Вот фрагменты кода, которые я попробовал: Обратите внимание, что возвращаемый символ находится не в конце строки .
!myField!.rstrip()
ИЛИ
!myField!.rstrip('\n')
ИЛИ
!myField!.rstrip('\r\n')
ИЛИ
!myField!.replace('\n', '')
Ошибка 000539 приведена для этой опции:
Описание Неверный расчет, используемый инструментом «Вычислить поле» или «Вычислить значение». В этом сообщении об ошибке будет указана конкретная ошибка Python.
Решение Этот код ошибки охватывает несколько ошибок Python:
Пример ошибки 1: exceptions.TypeError: невозможно объединить объекты 'str' и 'int'. Выше - ошибка, специфичная для Python. Расчет пытается добавить или объединить строку и число.
Пример ошибки 2: неверная форма поля @ расстояние. Выше приведена ошибка при использовании объекта геометрии. Метод расстояния не является допустимым методом объекта геометрии.
По конкретным вопросам Python обратитесь к внешней справке Python для получения дополнительной информации или к справке Calculate Field или Calculate Value для получения дополнительной информации об этих инструментах.
ИЛИ
import os
def removeReturn(myField):
s = myField.rstrip(os.linesep)
return s
Любые идеи о том, как удалить возвращаемые символы с помощью полевого калькулятора?
SyntaxError: EOL while scanning string literal
ошибку?Ответы:
Я думаю, что это просто ошибка / ограничение синтаксического анализатора Python с помощью калькулятора полей / инструмента вычисления поля. Если в текстовом поле
SyntaxError: EOL while scanning string literal
встречается символ новой строки, то происходит, что бы вы ни пытались.Я могу воспроизвести проблему в 10.1 SP1, импортировав следующий CSV-файл в файловую базу геоданных, добавив поле и просто попытавшись скопировать
Text
поле в новое поле, используя Калькулятор поля с анализатором Python и выражением!Text!
.Попробуйте переключиться на анализатор VB или использовать
UpdateCursor
и полностью избегать Калькулятора полей.Этот вопрос также обсуждается на форумах ESRI с такими же выводами:
Единственный соответствующий NIM, который я мог найти, был таким:
источник
Есть два возможных решения, которые я считаю надежными. По какой-то причине CartoPac позволяет людям помещать Return в поле REMARKS, где я работаю. Чтобы избавиться от них, наилучшим решением, которое я нашел, является использование Калькулятора поля.
Измените свой парсер на Python. Поместите следующее в Pre-Logic Script Code:
Поместите следующее в следующем текстовом поле (это работает над полем под названием ЗАМЕЧАНИЯ):
Когда возврат каретки будет удален, он добавит пробел, - и пробел между каждой строкой. Вы можете изменить «-» на другой символ или набор символов, если хотите. Но я нашел, что это работает лучше всего для меня, основываясь на том, как мои строительные бригады вводят данные. Операции «Найти / Заменить» легче выполнять, если есть распознаваемые шаблоны символов, разбивающие каждый возврат каретки, которые они используют в поле для обозначения нового атрибута (даже если это часто атрибут, который они могли просто вставить в соответствующее поле. и спас мне головную боль в первую очередь).
Если вы предпочитаете использовать консоль Python в ArcGIS, вы можете изменить вышеперечисленное для работы. Однако я также попробовал это с некоторым успехом в консоли Python:
Замените «Assets \ Welds» на соответствующее имя fc и замените row.REMARKS на row. (Введите имя поля здесь)
Вам может понадобиться, а может и не понадобиться запустить строки импорта ниже, прежде чем пытаться использовать приведенный выше пример кода:
источник
Чтобы обойти это, поскольку моя таблица классов объектов возникла в Excel, нужно было использовать следующую команду Excel:
метод для удаления всех символов возврата или новой строки. Затем вы можете присоединиться или импортировать таблицу в вашу базу данных ГИС.
источник
Я использовал оператор SQL, чтобы сначала выбрать символы новой строки. В
Select By Attributes
диалоговом окне:Вы должны нажать
Enter
после первого%.источник
MY_FIELD.strip()
к работе, но, поскольку у меня было только 5 записей, я вручную их редактировал.!MY_FIELD![:-1]
- срез строки должен удалять символ новой строки (при условии, что после новой строки ничего не приходит, что, по-видимому, имеет место для OP) ,!FieldName!.replace(chr(10), "").replace(chr(13), "")
Полевой калькулятор немного запутан, когда дело доходит до экранирующих последовательностей, таких как
\n
и\t
. Просто используйте сырые коды символов.источник
SyntaxError: EOL while scanning string literal
с этим. Парсер VB работает нормально.источник
Я думаю, что это должно работать как код предварительного скрипта в калькуляторе полей, но, к сожалению, это не так. В любом случае я разместил его на тот случай, если он даст вам альтернативный подход, который вы можете настроить, чтобы начать работать.
источник
Попробуйте обернуть ваше
!field!
объявление в выражении кавычками и инициализатором необработанной строки , напримерr"!field!"
.Попробуй
str(!field!)
также.источник
MYFIELD.replace(r"\n",""), but it doesn't see that I've escaped the newline character, it just fails with a
EOL` ошибку.