Python 在arcpy中将字符串字段转换为数字字段
我有大量(>1000)文件,其中有一些字段包含定义为文本字段的数字。我需要有一个包含这些值作为数字的字段。我可以添加新字段,但当我无法填充它们时 我使用的是ArcGis 10.1。行的值可能在0-10之间,最多包含一个小数位,或者对于变量,行可能为空(实际上为空,没有占位符) 下面是我用于两个变量(Python 在arcpy中将字符串字段转换为数字字段,python,type-conversion,arcgis,arcpy,Python,Type Conversion,Arcgis,Arcpy,我有大量(>1000)文件,其中有一些字段包含定义为文本字段的数字。我需要有一个包含这些值作为数字的字段。我可以添加新字段,但当我无法填充它们时 我使用的是ArcGis 10.1。行的值可能在0-10之间,最多包含一个小数位,或者对于变量,行可能为空(实际上为空,没有占位符) 下面是我用于两个变量(N\u CT和N\u CFY)的python脚本,以及我得到的错误。看起来我的问题在于如何将文本值转换为十进制转换 我不熟悉脚本,所以如果我的描述或单词选择不清楚,请原谅 import arcpy,
N\u CT
和N\u CFY
)的python脚本,以及我得到的错误。看起来我的问题在于如何将文本值转换为十进制转换
我不熟悉脚本,所以如果我的描述或单词选择不清楚,请原谅
import arcpy, os, sys
from arcpy import env
from decimal import *
arcpy.env.overwriteOutput = True
env.workspace = "C:\Users\OuelletteMS\Desktop\Ice_Data_testarea"
listFCs = arcpy.ListFeatureClasses("*")
for fc in listFCs:
print str("processing " + fc) # displays the file that is currently being handled
strNCT = "N_CT" # the current, text version of the field
newNCT = "NCT" # the new, number version I want to create
strNCFY = "N_CFY" # the current, text version of the field
newNCFY = "NCFY" # the new, number version I want to create
arcpy.AddField_management(fc,newNCT,"DOUBLE")
arcpy.AddField_management(fc,newNCFY,"DOUBLE")
cursor = arcpy.UpdateCursor(fc)
for row in cursor:
row.setValue(newNCT, row.getValue(Decimal(strNCT)))
row.setValue(newNCFY, row.getValue(Decimal(strNCFY)))
cursor.updateRow(row)
错误计量表:
运行时错误回溯(上次调用):文件“”,
第23行,在文件“C:\Python27\ArcGIS10.1\Lib\decimal.py”中,
第548行,在新建中
十进制无效的文本:%r“%value”)文件“C:\Python27\ArcGIS10.1\Lib\Decimal.py”,第3844行,出现错误
raise error(解释)InvalidOperation:十进制无效文字:“N\u CT”
您可以使用以下命令将字符串值转换为浮点整数:
stringA = '12'
# Convert string to integer:
int(stringA)
# Convert string to float
float(stringA)
我真的需要保留小数点,所以整数被去掉了,而float不能很好地保留精确的小数点(3.3 vs 3.29999997)。我真正的问题似乎是如何将字符串传递到Decimal函数中。也许你可以看看这里::一个float()会将所有数字保留在点或逗号后面。我的float问题不是它不会将所有数字保留在小数点之后,而是它添加的所有exra数字。有什么理由我不应该使用十进制函数吗?十进制函数很好用。我还想给你看这个:print(“%.2f”%stringA)这个只保留2位小数。我意识到我并没有像我想的那样将它发布到GIS论坛上。有没有办法把它转移到那个论坛?