python编程。ARCGIS的属性表中,假如已有LON和ADCODE这两列如何根据ADCODE和LON排序,实现ADDCODE列赋值
用python语言实现,现在已经用updadeCursor将所有行读取出来。已经实现了先按adcode再按lon排序,但对于adcode这一字段中相同的行,不知道如何判断...
用python语言实现,现在已经用updadeCursor将所有行读取出来。已经实现了先按adcode再按lon排序,但对于adcode这一字段中相同的行,不知道如何判断,请高手解答。
回1楼:我用rows=updateCursor("test.shp","","","ADCODE;LON"),读取出来行阵。
然后我想对ADCODE字段做判断,相同对我就从1开始递增,不同对就重新从1开始。
只是我不知道如何储存读取出来的行。存成可以row[0],row[1],row[2]这样的。
你上面定义的row[2],对于我读取出来的行阵没法这样指定。不知怎么用呢? 展开
回1楼:我用rows=updateCursor("test.shp","","","ADCODE;LON"),读取出来行阵。
然后我想对ADCODE字段做判断,相同对我就从1开始递增,不同对就重新从1开始。
只是我不知道如何储存读取出来的行。存成可以row[0],row[1],row[2]这样的。
你上面定义的row[2],对于我读取出来的行阵没法这样指定。不知怎么用呢? 展开
2个回答
展开全部
排序与排重,如果数据量少很容易。如果数据量大就需要建立索引。通过索引来检查是否有重复。
索引,通常用字典。也可以用set。如果想提高效果,可以将索引按前面(9个字节),你自己试一下做两级索引。这样速度会快很多。
你自己描述不清楚。弄不明白你想做什么?如果单纯排重是这样子
dict1={}
for row in rows:
adcode=row[2]
try:
dict1[adcode]
print "duplicate with..."
continue
except KeyError:
dict1[adcode]=None
#save row here
索引,通常用字典。也可以用set。如果想提高效果,可以将索引按前面(9个字节),你自己试一下做两级索引。这样速度会快很多。
你自己描述不清楚。弄不明白你想做什么?如果单纯排重是这样子
dict1={}
for row in rows:
adcode=row[2]
try:
dict1[adcode]
print "duplicate with..."
continue
except KeyError:
dict1[adcode]=None
#save row here
追问
谢谢回复,我现在只有ADCODE和LON字段,这是我的原数据,然后我要得到是ADCODE这个列,这个列是在ADCODE字段后加上3位标识码,如001,002这样的。LON字段是用来排序用的,就是ADDCODE要按照LON从小到大编码。{看问题补充}
追答
哦明白了。我建议你这样做。
先建立一个ADCODE为key的字典。然后将lon加进到去象这样,排序后就可以生成
inputs=[] # (lon,ADCODE),(lon,ADCODE),
#....
#load from file
#....
outputs=[]
tmpd={}
for lon,ADCODE in inputs:
try:
tmpd[ADCODE].append(lon)
except KeyError:
tmpd[ADCODE]=[lon]
for ADCODE in tmpd:
tmpd[ADCODE].sort()
for i in xrange(len(tmpd[ADCODE])):
ADDCODE="%s%03d"%(tmpd[ADCODE][i],i+1)
outputs.append((lon,ADCODE,ADDCODE))
#outputs就是你要的内容。当然你也可以
#outputs.sort()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的我看不是arcpy使用者,根本没必要写的那么麻烦。
可以用while循环来做,类似如下,我没有测试。
row = rows.next()
testValue = row.ADDCODE
row = rows.next()
while row:
temp = row.ADDCODE
if testValue == temp:
pass
else:
pass
row = rows.next()
可以用while循环来做,类似如下,我没有测试。
row = rows.next()
testValue = row.ADDCODE
row = rows.next()
while row:
temp = row.ADDCODE
if testValue == temp:
pass
else:
pass
row = rows.next()
更多追问追答
追问
是从第二行开始吧,用个变量存储上一行?能不能加些说明,pass那里根据要求加判断后
语句?
追答
写错了,应该类似如下,ff是新建的一个字符串字段,用于存储编码值:
rows = updateCursor("test.shp","","","ADCODE;LON")
row = rows.next()
testValue = row.ADDCODE
num = 1
row.ff = '0001'
row = rows.next()
while row:
if row.ADDCODE == testValue:
row.ff = ':0>4'.format(num + 1) #假设编码是4位,以0为填充值
num = num + 1
else:
row.ff = '0001'
num = 1
testValue = row.ADDCODE
row = rows.next()
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |