使用ArcGIS Field Calculator的Python解析器查找/替换双引号?


16

我正在尝试使用字段计算器(ArcMap 10.0)去除地址字段中的双引号(相信我,我没有把它们放在其中)。我尝试了许多咒语,但仍然无法通过计算开始。是的,两个字段均为字符串,且长度均可接受。

此计算: 样本计算

结果:

失败

在“结果”对话框中显示以下错误消息:

错误信息

我再说一遍,我没有把它们放在那里。


1
因此,您要在测试中复制带有引号的引文,是否已经尝试使用类似以下内容的引号去掉引号!testing![1:len(!testing!)-1]
Roy 2012年

您提供的代码片段死于同一条消息。
valve伦敦2012年

Answers:


16

我发现在10.0中,Field Calculator很奇怪。

但是我设法使它起作用。主要思想是用单引号将字段名称引起来。

例。假设我们有字段text1text2。与其尝试text2使用expression 计算字段,!text1!否则可能会失败,请尝试以下操作:'!text1'。如您所见,我在这里使用单引号。

因此,回到您的任务。使用Pre-Logic脚本代码将更加清楚:

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

表达式将是:

calc('!text1!')

希望它对您有用。

我没有做进一步的实验,但是我认为发生这种奇怪的行为是因为将字段计算转换为对ArcToolbox工具的调用,CalculateField_management并且将表达式作为参数提供给它(可能另外用单引号或双引号引起来)。

更新:

如果field的值中有单引号,我的先前解决方案将失败text1

现在,即使在attribute的任何值中都有char '"(单引号和双引号)的情况下,我也设法使其工作text1

这是表达式,它将返回原始字符串,同时支持两种引号:

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

对于您的任务,它可以扩展为(没有预逻辑脚本代码):

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

好吧,您抱有我的希望,但这对我没有用。无论是代码块还是直线上升'!testing!'
valveLondon 2012年

嗯,对我的10.0sp4起作用。可能是因为您的字段中的某个地方实际上是单引号...您是否考虑过在python脚本中使用UpdateCursor?
Alex Markov 2012年

2
你知道吗?您说对了,它确实有效。我还没有3:00醒来。你赢了。
valve伦敦2012年

我设法用单引号解决了问题。检查我对答案的更新。
Alex Markov 2012年

逻辑前脚本代码在脚本中使用时效果很好-非常感谢
meryloo

10

如果您使用的是版本10.1,并且确定要摆脱双引号的每个实例,则可以使用:

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

如果有人知道为什么它在10.1而不是10.0中起作用,我会感兴趣。

这是我跑步的结果条目。

在此处输入图片说明


这是什么魔术,您的脚本不起作用?
Artwork21年

这行不通。看起来应该如此,但事实并非如此。
KiloGeo 2012年

您两个字段的文字均正确吗?
TurboGus 2012年

@Gus,是字段为文本。
Artwork21年

2
我没有使用10.1。我使用的是10.0
原始

8

这是一种非脚本方式。

  1. 在您的图层上开始编辑会话。
  2. 打开表并突出显示字段列。
  3. 选择表选项下拉箭头,然后选择查找和替换。
  4. 选择“替换”选项卡,然后输入“查找内容:” ",选择“全部替换”(您必须单击两次“全部替换”按钮)。

尽管我很欣赏这种可能性,但我不仅想替换双引号,还希望通过脚本进行工作。
valve伦敦2012年

3

混合方法适用于我的系统:

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

2

我没有在Arc内尝试过此操作,但是我能够以这种(快速)方式从Python IDE中的字符串中删除双引号:

aStr ='"test"'

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

print a2

a2打印测试,不带引号。


我意识到这对您问题的“查找”部分没有帮助...
Timothy Michael


0

我发现使用旧的VBScript函数非常容易: Replace ([testing],"""","")

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.