1.某一个字段写入 固定字符串
----选择python,字符串
gxsj="2018-06-25"
点击确定。
2.根据ID字段填写URL字段
----新建url字段,类型为文本类型,简单模式下选择Python脚本
----输入表达式:"assets/imgs/M2U004"+str(int( !ID! %26+30))+".jpg"
----其中%为取余;int为取整;str为数值转字符。
3.高级模式
4.注意python语法之缩进问题,字段类型要与返回结果类型一致。
5.实现ID字段自增:注意缩进语法
----Python #程序语言
----Code Block: #下面这部分是具体实现,注意在放字段计算器时只需要下面这部分
rec=0
def autoIncrement(): #定义方法名
global rec
pStart = 1 #初始值, 可以调整
pInterval = 1 #自增间隔, 可以调整
if (rec == 0):
rec = pStart
else:
rec = rec + pInterval
return rec
---表达式
autoIncrement() #表达式方法
6.计算数值型字段的累加值
-----Python
-----Code Block: #下面这部分是具体实现,注意在放字段计算器时只需要下面这部分
total = 0
def accumulate(increment):
global total
if total:
total += increment
else:
total = increment
return total
----表达式
accumulate(!FieldA!) #该函数需要输入字段做参数
7.通过 numpy 站点包来计算 0.0 和 1.0 之间的随机浮点值
----Python
---Code Block:
import numpy.random as R
def getRandomValue():
return R.random()
----表达式
getRandomValue()
8.根据其他字段的值给这个字段赋值:
def cal (YB,SB):
return YB+SB
BM =
cal(!BDCDYH_YB!,!BDCDYH_SB!)
##########
YB和SB是一个二选一的字段,预编有字符串的话,实编就为null,需求是把它们两个合成一个字段BM,
那就定义一个函数把它们结合起来就可以了
##########
或者简单一点:
BM =
!BDCDYH_YB!+!BDCDYH_SB!
9.字符串截取
----在字段计算器内选择Python
----截取前面两位字符串:!BM![0:2]
----从第3位开始截取后面的字符串:!BM![3:] ---即把前面3个中文字符删除
#去除字符中间的其他符号
!BM![:4]+!BM![5:7]+!BM![7:11]
10.几何体计算
计算图斑面积:!Shape.Area! #单位是 平方米
质心X坐标:!Shape.CENTROID.X!
质心Y坐标:!Shape.CENTROID.Y!
将平方米转换为平方公里:!Area! /1000000
11.整数(int)转换为字符串(str)
----在字段计算器内选择Python,选择字符串
----输入str(!整数字段的名字!)
12.字符串截取、连接、赋值等
------定义函数
dm_1=""
def test(dm):
if dm[4:6] == "83":
dm_1 = dm[0:4] + "18" +dm[6:]
elif dm[4:6] == "84":
dm_1 = dm[0:4] + "17" +dm[6:]
elif dm[4:6] == "16":
dm_1 = dm[0:4] + "12" +dm[6:]
else:
dm_1 = dm
return dm_1
-----表达式
test(!xzqhdm!)
13.字符串与日期字段的转换
需要使用到python中time和datetime包,这两个包的使用
-----字段计算器,高级模式,选择Python
-----定义函数
def str_to_datetime(str):
if str =="_": ----因为日期字符串里面有这种非法字段
d=datetime.datetime.strptime('2018-07-30 00:00:00','%Y-%m-%d %H:%M:%S')
else:
d= datetime.datetime.strptime(str,'%Y-%m-%d %H:%M:%S')
return d
----调用函数
str_to_datetime( !TFSJ! )
PS:开始总是转换不成功,报错,后来才发现日期字符串是这样的:'2018-05-15 11:10:56.0'
即后面多了一个.0
-----浪费了一个上午,才发现这个问题