python 入门教程

转自:http://blog.sina.com.cn/s/blog_86a2baab0101aszf.html
1 Python入门
1.1 字符串操作
1.1.1 复制字符串
#strcpy(sStr1,sStr2)
sStr1 = 'strcpy'
sStr2 = sStr1
sStr1 = 'strcpy2'
print sStr2
1.1.2 连接字符串
#strcat(sStr1,sStr2)
sStr1 = 'strcat'
sStr2 = 'append'
sStr1 += sStr2
print sStr1
1.1.3 查找字符
#strchr(sStr1,sStr2)
sStr1 = 'strchr'
sStr2 = 'r'
nPos = sStr1.index(sStr2)
print nPos
1.1.4 比较字符串
#strcmp(sStr1,sStr2)
sStr1 = 'strchr'
sStr2 = 'strch'
print cmp(sStr1,sStr2)
1.1.5 扫描字符串是否包含指定的字符
#strspn(sStr1,sStr2)
sStr1 = '12345678'
sStr2 = '456'
#sStr1 and chars both in sStr1 and sStr2
print len(sStr1 and sStr2)
1.1.6 字符串长度
#strlen(sStr1)
sStr1 = 'strlen'
print len(sStr1)
1.1.7 将字符串中的小写字符转换为大写字符
#strlwr(sStr1)
sStr1 = 'JCstrlwr'
sStr1 = sStr1.upper()
print sStr1
1.1.8 追加指定长度的字符串
#strncat(sStr1,sStr2,n)
sStr1 = '12345'
sStr2 = 'abcdef'
n = 3
sStr1 += sStr2[0:n]
print sStr1
1.1.9 字符串指定长度比较
#strncmp(sStr1,sStr2,n)
sStr1 = '12345'
sStr2 = '123bc'
n = 3
print cmp(sStr1[0:n],sStr2[0:n])
1.1.10 复制指定长度的字符
#strncpy(sStr1,sStr2,n)
sStr1 = ''
sStr2 = '12345'
n = 3
sStr1 = sStr2[0:n]
print sStr1
1.1.11 字符串比较,不区分大小写
#stricmp(sStr1,sStr2)
sStr1 = 'abcefg'
sStr2 = 'ABCEFG'
print cmp(sStr1.upper(),sStr2.upper())
1.1.12 将字符串前n个字符替换为指定的字符
#strnset(sStr1,ch,n)
sStr1 = '12345'
ch = 'r'
n = 3
sStr1 = n * ch + sStr1[3:]
print sStr1
1.1.13 扫描字符串
#strpbrk(sStr1,sStr2)
sStr1 = 'cekjgdklab'
sStr2 = 'gka'
nPos = -1
for c in sStr1:
if c in sStr2:
nPos = sStr1.index(c)
break
print nPos
1.1.14 翻转字符串
#strrev(sStr1)
sStr1 = 'abcdefg'
sStr1 = sStr1[::-1]
print sStr1
1.1.15 找字符串
python strstr
#strstr(sStr1,sStr2)
sStr1 = 'abcdefg'
sStr2 = 'cde'
print sStr1.find(sStr2)
1.1.16 分割字符串
#strtok(sStr1,sStr2)
sStr1 = 'ab,cde,fgh,ijk'
sStr2 = ','
sStr1 = sStr1[sStr1.find(sStr2) + 1:]
print sStr1
 
1.2 语法
1.2.1 Python 变量类型
Python是有变量类型的,而且会强制检查变量类型。
内置的变量类型有如下几种:
#整型
integer_number = 90
 
#浮点
float_number = 90.4
 
#复数
complex_number = 10 + 10j
 
#list 序列
sample_list = [1,2,3,'abc']
 
#dictionary 字典
sample_dic = {"key":value, 2:3}
 
#tuple 只读的序列
sample_tuple = (1,3,"ab")
1.2.2 Python 程序流程控制
1.2.2.1 条件判断结构
flag1 = some_value
flag2 = other_value
if flag1:
do_function_1()
elif flag2:
do_function_2()
else:
do_function_3()
1.2.2.2 循环结构
for i in range(0, 10):
print(i)
 
for i in ['a','b','c','dd','eee'];
print(i)
 
1.2.3 Python 列表(list)操作
1.2.3.1 创建列表
sample_list = ['a',1,('a','b')]
1.2.3.2 Python 列表操作
sample_list = ['a','b',0,1,3]
1.2.3.3 得到列表中的某一个值
value_start = sample_list[0]
end_value = sample_list[-1]
1.2.3.4 删除列表的第一个值
del sample_list[0]
1.2.3.5 在列表中插入一个值
sample_list[0:0] = ['sample value']
1.2.3.6 得到列表的长度
list_length = len(sample_list)
1.2.3.7 列表遍历
for element in sample_list:
print(element)
1.2.3.8 Python 列表高级操作/技巧
l  产生一个数值递增列表
num_inc_list = range(30)
#will return a list [0,1,2,...,29]
l  用某个固定值初始化列表
initial_value = 0
list_length = 5
sample_list = [ initial_value for i in range(10)]
sample_list = [initial_value]*list_length
# sample_list ==[0,0,0,0,0]
2 Python在ArcGIS常用语句
2.1 属性选择
temp_layer="temp_layer"
gp.MakeFeatureLayer_management(XZQJXName, temp_layer)
gp.SelectLayerByAttribute_management(temp_layer, "NEW_SELECTION", "JXLX is null")
num=gp.getcount(temp_layer)
if num>0:
gp.AddMessage("返回:"+str(num))
return
2.2 是否存在
if gp.exists(DLJX_buffer):
2.3 图层条件另存
gp.Select_analysis(layername,DLJX2,"") #备份
layername是原始数据
中间的备份后表名,最后是条件
2.4 擦除Erase
gp.Erase_analysis(newtablename, temp_layer, DLJX, "")
2.5 面转线
 
gp.PolygonToLine_management(DLTB, DLTB_PolygonToLine)
2.6 缓冲区
gp.Buffer_analysis(XZDW, XZDW_Buffer, ".5 Meters", "FULL", "ROUND", "NONE", "")
2.7 删除数据
gp.Delete_management(DLTB_PolygonToLine, "FeatureClass") #删除临时数据
2.8 追加数据
gp.Append_management(DLTB_Select, outlayername, "TEST", "", "")
后面outlayername是目标图层
前面是要追加的数据
3 Python在ArcGIS中应用
3.1 获得字段位置
def getfieldidx(TableName,fieldname): #获得字段位置
desc = gp.Describe(TableName)
fields = desc.Fields
field=fields.next()
i=-1;
while field:
# Check the field name, perform a calculation when finding the field 'Flag'
#
if field.Name.upper() == fieldname.upper():
gp.AddMessage("======:"+fieldname)
return i
field=fields.next()
i=i+1
return -1
3.2 UpdateCursor和setvalue使用例子
def UpdateAngle(dgx):
desc = gp.Describe(dgx)
shapefieldname = desc.ShapeFieldName
angleidx=getfieldidx(dgx,"Angle")
gp.AddMessage("正在处理======angleidx:"+str(angleidx))
 
rows = gp.UpdateCursor(dgx,"Angle>90 and Angle<270")
row = rows.Next()
p=0
while row:
angle = row.GetValue("Angle")
angle=angle+180
if angle>=360:
angle=angle-360
row.SetValue("Angle",angle);
rows.UpdateRow(row)
gp.AddMessage("正在处理======angle:"+str(p)+":"+str(angle))
p=p+1
row = rows.Next()
3.3 更新线的长度到字段
代码:
# ---------------------------------------------------------------------------
# 1.py
# Created on: 周二 五月 11 2010 12:24:15 下午
#   (generated by ArcGIS/ModelBuilder)
# ---------------------------------------------------------------------------
 
# Import system modules
import sys, string, os, arcgisscripting
 
# Create the Geoprocessor object
gp = arcgisscripting.create()
 
inFeatureclass  = gp.GetParameterAsText(0)
inField  = gp.GetParameterAsText(1)
rows = gp.UpdateCursor(inFeatureclass)
row = rows.Next()
 
# Calculate the total length of all roads
#
length = 0
try:
while row:
# Create the geometry object
#
feat = row.shape
length = length + feat.Length
row.SetValue(inField,feat.Length)
rows.UpdateRow(row)
row = rows.Next()
# Print the total length of all roads
#
gp.AddMessage("总线的长度:"+str(length))
except Exception, ErrorDesc:
gp.AddError(str(ErrorDesc))
参数设置
 
有输出表可以 model调用
# ---------------------------------------------------------------------------
# 1.py
# Created on: 周二 五月 11 2010 12:24:15 下午
#   (generated by ArcGIS/ModelBuilder)
# ---------------------------------------------------------------------------
 
# Import system modules
import sys, string, os, arcgisscripting
 
# Create the Geoprocessor object
gp = arcgisscripting.create()
 
inFeatureclass  = gp.GetParameterAsText(0) #原始数据
inField  = gp.GetParameterAsText(1)
outFeatureclass  = gp.GetParameterAsText(2) #输出数据
gp.CopyFeatures(inFeatureclass,outFeatureclass)
 
 
rows = gp.UpdateCursor(outFeatureclass)
row = rows.Next()
 
# Calculate the total length of all roads
#
length = 0
try:
while row:
# Create the geometry object
#
feat = row.shape
length = length + feat.Length
row.SetValue(inField,feat.Length)
rows.UpdateRow(row)
row = rows.Next()
# Print the total length of all roads
#
gp.AddMessage("总线的长度:"+str(length))
except Exception, ErrorDesc:
gp.AddError(str(ErrorDesc))
 
 
3.4 批量给一个Workspace中表加字段
# ---------------------------------------------------------------------------
# 1.py
# Created on: 星期日 一月 10 2010 11:02:13 上午
#   (generated by ArcGIS/ModelBuilder)
# Usage: 1 <输入workspace或gdb>
# ---------------------------------------------------------------------------
 
# Import system modules
import sys, string, os, arcgisscripting
 
# Create the Geoprocessor object
gp = arcgisscripting.create()
 
inworkspace = gp.GetParameterAsText(0)
 
 
gp.Workspace = inworkspace
fcs = gp.ListFeatureClasses()
fc = fcs.Next()
while fc:
try:
# Process: 增加id字段...
gp.AddField_management(fc, "id", "LONG", "", "", "", "序号", "NULLABLE", "NON_REQUIRED", "")
 
# Process: 增加名称...
gp.AddField_management(fc, "name", "TEXT", "", "", "16", "名称", "NULLABLE", "NON_REQUIRED", "")
gp.AddMessage("fc="+fc+",加字段已完成");
 
except Exception, ErrorDesc:
#If an error set output boolean parameter "Error" to True.
gp.AddError(str(ErrorDesc))
print "Failed to convert %s\\%s\n%s" % (fc, gp.GetMessages(2))
 
# Proceed to the next feature class
fc = fcs.Next()
 
3.5 获得一个Workspace中FeatureDataset
---------------------------------------------------------------------------
# 1.py
# Created on: 星期日 一月 10 2010 11:02:13 上午
#   (generated by ArcGIS/ModelBuilder)
# Usage: 1 <输入图层>
# ---------------------------------------------------------------------------
 
# Import system modules
import sys, string, os, arcgisscripting
 
# Create the Geoprocessor object
gp = arcgisscripting.create()
 
inworkspace = gp.GetParameterAsText(0)
 
 
gp.Workspace = inworkspace
pItems = gp.ListDatasets()
pItem = pItems.Next()
while pItem:
gp.AddMessage("pItem="+pItem);
pItem = pItems.Next()
3.6 矢量批量切割按图幅、行政区划
# ---------------------------------------------------------------------------
# 1.py
# Created on: 星期日 一月 10 2010 11:02:13 上午
#   (generated by ArcGIS/ModelBuilder)
# Usage: 矢量图批量切割, by 闫磊 4个参数
# 原始数据 是图层,可以多选
# 切割工具是是接幅表 或则行政
# 字段是输出mdb名称
# 输出路径
# ---------------------------------------------------------------------------
# Create Geoprocessing Object
import arcgisscripting, sys, os, string
gp = arcgisscripting.create()
gp.overwriteoutput = 1
inworkspace  = gp.GetParameterAsText(0)
gp.AddMessage("1="+inworkspace)
clipshp  = gp.GetParameterAsText(1)
gp.AddMessage("2=clipshp"+clipshp)
fieldname= gp.GetParameterAsText(2)
gp.AddMessage("3=fieldname"+fieldname)
outworkspace  = gp.GetParameterAsText(3)
gp.AddMessage("4="+outworkspace)
mdbbool  = gp.GetParameterAsText(4)
gp.AddMessage("5="+mdbbool)
 
desc = gp.Describe(clipshp)
filepath=desc.CatalogPath
p=filepath.find(".mdb")
 
 
fields = desc.Fields
ftype="String"
field=fields.next()
while field:
# Check the field name, perform a calculation when finding the field 'Flag'
#
if field.Name == fieldname:
# Set the value for the field and exit loop
#
ftype=field.Type
break
field=fields.next()
jfb_Select="c:\\yl.shp" #不能c:\要c:\\或则c:/
 
rows = gp.searchcursor(clipshp)
#gp.AddMessage("5=执行到这里")
row = rows.next()
#gp.AddMessage("6=执行到这里")
while row:
#gp.AddMessage("7=执行到这里")
fieldvalue =""+ row.GetValue(fieldname)
#gp.AddMessage("fieldvalue="+fieldvalue)
if p>0: #mdb
Expression="["+fieldname +"]="
else:
Expression="""+fieldname +""="
#gp.AddMessage("Expression1="+Expression)
if ftype=="String":
Expression=Expression+"'"+fieldvalue+"'"
else:
Expression=Expression+fieldvalue
 
#gp.AddMessage("Expression2="+Expression)
gp.Select_analysis(clipshp, jfb_Select,Expression)
#gp.AddMessage("6=clipshp"+clipshp)
out_mdb=""
#gp.AddMessage("======================================================out_mdb"+out_mdb)
if mdbbool=="True":
out_mdb=outworkspace + "\"+fieldvalue+".mdb"  #os.path.basename(dataset)
else:
out_mdb=outworkspace + "\"+fieldvalue+".gdb"
gp.AddMessage("3=out_mdb"+out_mdb)
if not gp.Exists(out_mdb):
if mdbbool=="True":
gp.CreatePersonalGDB(os.path.dirname(out_mdb),os.path.basename(out_mdb))
else:
gp.CreateFileGDB(os.path.dirname(out_mdb),os.path.basename(out_mdb))
#gp.AddMessage("88888888888888888888888888888888888888")
mydatasets= string.split(inworkspace,";")
 
for dataset in mydatasets:
 
try:
gp.AddMessage("正在切割="+dataset+":为"+out_mdb+"\"+ os.path.basename(dataset))
gp.Clip_analysis(dataset, jfb_Select,out_mdb+"\"+ os.path.basename(dataset), ".001 Meters")
except Exception, ErrorDesc:
#If an error set output boolean parameter "Error" to True.
gp.AddError(str(ErrorDesc))
row = rows.next()
if gp.exists(jfb_Select):
gp.Delete_management(jfb_Select)
 
 
 
 
 
 
 
 
 
 
 
运行界面
 
输出mdb,切割使用shp
# ---------------------------------------------------------------------------
# 1.py
# Created on: 星期日 一月 10 2010 11:02:13 上午
#   (generated by ArcGIS/ModelBuilder)
# Usage: 矢量图批量切割, by 闫磊 4个参数
# 原始数据 是图层,可以多选
# 切割工具是是接幅表 或则行政
# 字段是输出mdb名称
# 输出路径
# ---------------------------------------------------------------------------
# Create Geoprocessing Object
import arcgisscripting, sys, os, string
gp = arcgisscripting.create()
gp.overwriteoutput = 1
inworkspace  = gp.GetParameterAsText(0)
gp.AddMessage("1="+inworkspace)
clipshp  = gp.GetParameterAsText(1)
gp.AddMessage("2=clipshp"+clipshp)
fieldname= gp.GetParameterAsText(2)
gp.AddMessage("3=fieldname"+fieldname)
outworkspace  = gp.GetParameterAsText(3)
gp.AddMessage("4="+outworkspace)
rows = gp.searchcursor(clipshp)
gp.AddMessage("5=执行到这里")
row = rows.next()
jfb_Select="e:\\yl.shp" #不能c:\要c:\\或则c:/
gp.AddMessage("6=执行到这里")
while row:
gp.AddMessage("7=执行到这里")
fieldvalue ="" + row.GetValue(fieldname)
gp.AddMessage("fieldvalue="+fieldvalue)
Expression="""+fieldname +"" like '"+fieldvalue+"'"
gp.AddMessage("Expression="+Expression)
gp.Select_analysis(clipshp, jfb_Select,Expression)
gp.AddMessage("6=clipshp"+clipshp)
out_mdb=outworkspace + "\"+fieldvalue+".mdb"  #os.path.basename(dataset)
 
 
p=out_mdb.find(".")
out_mdb=out_mdb[0:p]+".mdb"
gp.AddMessage("3="+out_mdb)
 
if not gp.Exists(out_mdb):
gp.CreatePersonalGDB(os.path.dirname(out_mdb),os.path.basename(out_mdb))
try:
indatasets = string.split(inworkspace , ";")
 
for dataset in indatasets:
gp.AddMessage("正在切割="+dataset+":为"+out_mdb+"\"+ os.path.basename(dataset))
gp.Clip_analysis(dataset, jfb_Select,out_mdb+"\"+ os.path.basename(dataset), ".001 Meters")
 
except Exception, ErrorDesc:
#If an error set output boolean parameter "Error" to True.
gp.AddError(str(ErrorDesc))
row = rows.next()
 
 
 
 
3.7 影像切割
# ---------------------------------------------------------------------------
# 1.py
# Created on: 星期日 一月 10 2010 11:02:13 上午
#   (generated by ArcGIS/ModelBuilder)
# Usage: 影像批量切割, by 闫磊 4个参数
# 原始影像数据
# 切割工具是是接幅表 或则行政
# 字段是输出gdb名称
# 输出路径
# ---------------------------------------------------------------------------
# Create Geoprocessing Object
import arcgisscripting, sys, os, string,types
gp = arcgisscripting.create(9.3)
gp.overwriteoutput = 1
oldraster  = gp.GetParameterAsText(0)
gp.AddMessage("1oldraster="+oldraster)
clipshp  = gp.GetParameterAsText(1)
gp.AddMessage("2clipshp="+clipshp)
fieldname= gp.GetParameterAsText(2)
gp.AddMessage("3fieldname="+fieldname)
outworkspace  = gp.GetParameterAsText(3)
gp.AddMessage("4="+outworkspace)
 
desc = gp.Describe(clipshp)
filepath=desc.CatalogPath
p=filepath.find(".mdb")
 
 
fields = desc.Fields
ftype="String"
for field in fields:
# Check the field name, perform a calculation when finding the field 'Flag'
#
if field.Name == fieldname:
# Set the value for the field and exit loop
#
ftype=field.Type
break
 
rows = gp.searchcursor(clipshp)
row = rows.next()
jfb_Select=outworkspace+"\\temp.shp" #不能c:\要c:\\或则c:/
#gp.CheckOutExtension("spatial")
 
while row:
try:
 
value=str(row.GetValue(fieldname))
fieldvalue = value
if p>0: #mdb
Expression="["+fieldname +"]="
else:
Expression="""+fieldname +""="
if ftype=="String":
Expression=Expression+"'"+fieldvalue+"'"
else:
Expression=Expression+fieldvalue
 
gp.AddMessage("Expression="+Expression+",jfb_Select="+jfb_Select+",clipshp="+clipshp)
gp.Select_analysis(clipshp, jfb_Select, Expression)
 
out_raster =outworkspace+"/"+fieldvalue+".img"
gp.ExtractByMask_sa(oldraster, jfb_Select, out_raster)
except Exception, ErrorDesc:
#If an error set output boolean parameter "Error" to True.
gp.AddError(str(ErrorDesc))
 
row = rows.next()
 
if gp.exists(jfb_Select):
gp.Delete_management(jfb_Select)
参数设置:
 
 
界面:
 
最终代码,考虑了数字和字符串
# ---------------------------------------------------------------------------
# 1.py
# Created on: 星期日 一月 10 2010 11:02:13 上午
#   (generated by ArcGIS/ModelBuilder)
# Usage: 影像批量切割, by 闫磊 4个参数
# 原始影像数据
# 切割工具是是接幅表 或则行政
# 字段是输出gdb名称
# 输出路径
# ---------------------------------------------------------------------------
# Create Geoprocessing Object
import arcgisscripting, sys, os, string,types
gp = arcgisscripting.create(9.3)
gp.overwriteoutput = 1
oldraster  = gp.GetParameterAsText(0)
gp.AddMessage("1oldraster="+oldraster)
clipshp  = gp.GetParameterAsText(1)
gp.AddMessage("2clipshp="+clipshp)
fieldname= gp.GetParameterAsText(2)
gp.AddMessage("3fieldname="+fieldname)
outworkspace  = gp.GetParameterAsText(3)
gp.AddMessage("4="+outworkspace)
 
desc = gp.Describe(clipshp)
 
fields = desc.Fields
ftype="String"
for field in fields:
# Check the field name, perform a calculation when finding the field 'Flag'
#
if field.Name == fieldname:
# Set the value for the field and exit loop
#
ftype=field.Type
break
 
rows = gp.searchcursor(clipshp)
row = rows.next()
jfb_Select=outworkspace+"\\temp.shp" #不能c:\要c:\\或则c:/
#gp.CheckOutExtension("spatial")
 
while row:
try:
 
value=str(row.GetValue(fieldname))
fieldvalue = value
if ftype=="String":
Expression="""+fieldname +""='"+fieldvalue+"'"
else:
Expression="""+fieldname +""="+fieldvalue
 
gp.AddMessage("Expression="+Expression+",jfb_Select="+jfb_Select+",clipshp="+clipshp)
gp.Select_analysis(clipshp, jfb_Select, Expression)
 
out_raster =outworkspace+"/"+fieldvalue+".img"
gp.ExtractByMask_sa(oldraster, jfb_Select, out_raster)
except Exception, ErrorDesc:
#If an error set output boolean parameter "Error" to True.
gp.AddError(str(ErrorDesc))
 
row = rows.next()
 
if gp.exists(jfb_Select):
gp.Delete_management(jfb_Select)
3.8 影像切割另一种方法代码,要先打开数据
# ---------------------------------------------------------------------------
# 1.py
# Created on: 星期日 一月 10 2010 11:02:13 上午
#   (generated by ArcGIS/ModelBuilder)
# Usage: 影像批量切割, by 闫磊 4个参数
# 原始影像数据  不要临时导出数据,要打开数据
# 切割工具是是接幅表 或则行政
# 字段是输出gdb名称
# 输出路径
# ---------------------------------------------------------------------------
# Create Geoprocessing Object
import arcgisscripting, sys, os, string,types
gp = arcgisscripting.create(9.3)
gp.overwriteoutput = 1
oldraster  = gp.GetParameterAsText(0)
gp.AddMessage("1oldraster="+oldraster)
clipshp  = gp.GetParameterAsText(1)
gp.AddMessage("2clipshp="+clipshp)
fieldname= gp.GetParameterAsText(2)
gp.AddMessage("3fieldname="+fieldname)
outworkspace  = gp.GetParameterAsText(3)
gp.AddMessage("4="+outworkspace)
 
desc = gp.Describe(clipshp)
 
fields = desc.Fields
ftype="String"
for field in fields:
# Check the field name, perform a calculation when finding the field 'Flag'
#
if field.Name == fieldname:
# Set the value for the field and exit loop
#
ftype=field.Type
break
 
 
rows = gp.searchcursor(clipshp)
row = rows.next()
 
#gp.CheckOutExtension("spatial")
 
while row:
try:
 
value=str(row.GetValue(fieldname))
fieldvalue = value
if ftype=="String":
Expression="""+fieldname +""='"+fieldvalue+"'"
else:
Expression="""+fieldname +""="+fieldvalue
gp.AddMessage("Expression="+Expression+",clipshp="+clipshp)
gp.SelectLayerByAttribute_management(clipshp, "NEW_SELECTION", Expression)
 
out_raster =outworkspace+"/"+fieldvalue+".img"
gp.ExtractByMask_sa(oldraster, clipshp, out_raster)
except Exception, ErrorDesc:
#If an error set output boolean parameter "Error" to True.
gp.AddError(str(ErrorDesc))
 
row = rows.next()
 
 
 

 
3.9 对一个目录下(含子目录)所有GeoDatabase紧缩
import arcgisscripting
import os
from os.path import join, getsize
gp = arcgisscripting.create()
inpath  = gp.GetParameterAsText(0)
for root, dirs, files  in os.walk(inpath):
         gp.workspace = root
        
         # List all access workspaces in the current workspace
         workspaces = gp.listworkspaces("*", "access")
         workspace = workspaces.next()
         try:
                   while workspace:
                       # Compact each geodatabase
                       gp.AddMessage("处理名字mdb:"+workspace)
                       gp.compact(workspace)
                       workspace = workspaces.next()
         except Exception, ErrorDesc:
             gp.AddError(str(ErrorDesc))     
         workspaces = gp.listworkspaces("*", "FileGDB")
         workspace = workspaces.next()
         try:
                   while workspace:
                       # Compact each geodatabase
                       gp.AddMessage("处理名字FileGDB:"+workspace)
                       gp.compact(workspace)
                       workspace = workspaces.next()
         except Exception, ErrorDesc:
             gp.AddError(str(ErrorDesc))  
运行界面
参数设置
 
3.10 修复一个目录下所有shp文件
# ---------------------------------------------------------------------------
# 1.py
# Created on: 星期日 一月 10 2010 11:02:13 上午
#   (generated by ArcGIS/ModelBuilder)
# Usage: 1 <输入workspace或gdb>
# ---------------------------------------------------------------------------
 
# Import system modules
import sys, string, os, arcgisscripting
 
# Create the Geoprocessor object
gp = arcgisscripting.create()
 
inworkspace = gp.GetParameterAsText(0)
 
 
gp.Workspace = inworkspace
fcs = gp.ListFeatureClasses("", "Polygon", "")
fc = fcs.Next()
while fc:
    try:
       gp.RepairGeometry_management(inworkspace+"\"+fc+".shp", "DELETE_NULL")
       gp.AddMessage("处理图层:"+inworkspace+"\"+fc+".shp")
    except Exception, ErrorDesc:
        #If an error set output boolean parameter "Error" to True.
        gp.AddError(str(ErrorDesc))
       
    # Proceed to the next feature class
    fc = fcs.Next()
对于MDB
 
# ---------------------------------------------------------------------------
# 1.py
# Created on: 星期日 一月 10 2010 11:02:13 上午
#   (generated by ArcGIS/ModelBuilder)
# Usage: 1 <输入workspace或gdb>
# ---------------------------------------------------------------------------
 
# Import system modules
import sys, string, os, arcgisscripting
 
# Create the Geoprocessor object
gp = arcgisscripting.create()
 
inworkspace = gp.GetParameterAsText(0)
 
 
gp.Workspace = inworkspace
fcs = gp.ListFeatureClasses("", "Polygon", "")
fc = fcs.Next()
while fc:
    try:
       gp.RepairGeometry_management(inworkspace+"\"+fc, "DELETE_NULL")
       gp.AddMessage("处理图层:"+inworkspace+"\"+fc)
    except Exception, ErrorDesc:
        #If an error set output boolean parameter "Error" to True.
        gp.AddError(str(ErrorDesc))
       
    # Proceed to the next feature class
    fc = fcs.Next()
 
              
3.11 修复一个MBD下所有面文件(含数据集)
 
# ---------------------------------------------------------------------------
# 1.py
# Created on: 星期日 一月 10 2010 11:02:13 上午
#   (generated by ArcGIS/ModelBuilder)
# Usage: 1 <输入workspace或gdb>
# ---------------------------------------------------------------------------
 
# Import system modules
import sys, string, os, arcgisscripting
 
# Create the Geoprocessor object
gp = arcgisscripting.create()
 
inworkspace = gp.GetParameterAsText(0)
 
 
gp.Workspace = inworkspace
 
fcs = gp.ListFeatureClasses("", "Polygon", "")
fc = fcs.Next()
while fc:
    try:
       gp.RepairGeometry_management(inworkspace+"\"+fc, "DELETE_NULL")
       gp.AddMessage("处理图层:"+inworkspace+"\"+fc)
    except Exception, ErrorDesc:
        #If an error set output boolean parameter "Error" to True.
        gp.AddError(str(ErrorDesc))
       
    # Proceed to the next feature class
    fc = fcs.Next()
 
datasets = gp.listdatasets("", "")
dataset = datasets.Next()
while dataset:
    gp.AddMessage("处理图层:"+dataset)
    gp.Workspace = inworkspace+"\"+dataset
    fcs = gp.ListFeatureClasses("", "Polygon", "")
    fc = fcs.Next()
    while fc:
        try:
           gp.RepairGeometry_management(fc, "DELETE_NULL")
           gp.AddMessage("处理图层:"+fc)
        except Exception, ErrorDesc:
            #If an error set output boolean parameter "Error" to True.
            gp.AddError(str(ErrorDesc))
       
        # Proceed to the next feature class
        fc = fcs.Next()
    dataset = datasets.Next()
3.12 修复一个目录下含子目录,所有MBD中下面文件(含数据集)
import arcgisscripting
import os
from os.path import join, getsize
gp = arcgisscripting.create()
inpath  = gp.GetParameterAsText(0)
for root, dirs, files  in os.walk(inpath):
         gp.workspace = root
         # List all access workspaces in the current workspace
         workspaces = gp.listworkspaces("*", "access")
        
         inworkspace = workspaces.next()
         while inworkspace:
                   gp.Workspace = inworkspace
 
                   fcs = gp.ListFeatureClasses("", "Polygon", "")
                   fc = fcs.Next()
                   while fc:
                            try:
                                     gp.RepairGeometry_management(inworkspace+"\"+fc, "DELETE_NULL")
                                     gp.AddMessage("处理图层:"+inworkspace+"\"+fc)
                            except Exception, ErrorDesc:
                                     #If an error set output boolean parameter "Error" to True.
                                     gp.AddError(str(ErrorDesc))
                            # Proceed to the next feature class
                            fc = fcs.Next()
 
                   datasets = gp.listdatasets("", "")
                   dataset = datasets.Next()
                   while dataset:
                            gp.AddMessage("处理图层:"+dataset)
                            gp.Workspace = inworkspace+"\"+dataset
                            fcs = gp.ListFeatureClasses("", "Polygon", "")
                            fc = fcs.Next()
                            while fc:
                                     try:
                                               gp.RepairGeometry_management(fc, "DELETE_NULL")
                                               gp.AddMessage("处理图层:"+fc)
                                     except Exception, ErrorDesc:
                                               #If an error set output boolean parameter "Error" to True.
                                               gp.AddError(str(ErrorDesc))
                                     # Proceed to the next feature class
                                     fc = fcs.Next()
                            dataset = datasets.Next()
                   inworkspace = workspaces.next()
 
3.13 #修复一个目录下含子目录,所有shp面文件
import arcgisscripting
import os
from os.path import join, getsize
gp = arcgisscripting.create()
inpath  = gp.GetParameterAsText(0)
for root, dirs, files  in os.walk(inpath):
         gp.workspace = root
         inworkspace=root
        
         fcs = gp.ListFeatureClasses("", "Polygon", "")
         fc = fcs.Next()
         while fc:
                   try:
                            gp.RepairGeometry_management(inworkspace+"\"+fc+".shp", "DELETE_NULL")
                            gp.AddMessage("处理图层:"+inworkspace+"\"+fc+".shp")
                   except Exception, ErrorDesc:
                            #If an error set output boolean parameter "Error" to True.
                                     gp.AddError(str(ErrorDesc))
                                     # Proceed to the next feature class
                   fc = fcs.Next()
                             
 
3.14 将一个目录下含子目录所有gdb转成mdb
 
# -*- coding: cp936 -*-
# ---------------------------------------------------------------------------
# 1.py
# Created on: 星期日 一月 10 2010 11:02:13 上午
#   (generated by ArcGIS/ModelBuilder)
# Usage: 1 <输入workspace>,把一个目录含子目录的gdb,转换为mdb
# ---------------------------------------------------------------------------
 
# Import system modules
import sys, string, os, arcgisscripting
def tomdb(inworkspace,outworkspace,gp):
    gp.AddMessage("进入子函数处理图层:"+outworkspace+":"+inworkspace+"===========")
    pathstr=os.path.dirname(outworkspace)
    if not os.path.exists(pathstr):
       os.makedirs(pathstr)
   
    if not gp.Exists(outworkspace):
        gp.CreatePersonalGDB(pathstr,os.path.basename(outworkspace))
    gp.AddMessage("到这里:"+outworkspace+":"+inworkspace+"===========")
    gp.Workspace = inworkspace
    fcs = gp.ListFeatureClasses("", "", "")
    fc = fcs.Next()
    while fc:
   
            try:
                    gp.AddMessage("进入子函数处理图层:"+inworkspace+"\"+fc)
                    gp.CopyFeatures(inworkspace+"\"+fc, outworkspace+"\"+fc)
            except Exception, ErrorDesc:
                    #If an error set output boolean parameter "Error" to True.
                    gp.AddError(str(ErrorDesc))
                    # Proceed to the next feature class
            fc = fcs.Next()
            #数据集
    pItems = gp.ListDatasets()
    pItem = pItems.Next()
    while pItem:
            try:
                    gp.AddMessage("处理数据集:"+inworkspace+"\"+pItem)
                    gp.Copy_management(inworkspace+"\"+pItem, outworkspace+"\"+pItem,"FeatureDataset")
            except Exception, ErrorDesc:
                    #If an error set output boolean parameter "Error" to True.
                    gp.AddError(str(ErrorDesc))
            pItem = pItems.Next()      
       
 
# Create the Geoprocessor object
gp = arcgisscripting.create()
 
inworkspace = gp.GetParameterAsText(0)
outworkspace = gp.GetParameterAsText(1)
if not gp.Exists(outworkspace):
    gp.CreateFolder_management(os.path.dirname(outworkspace),os.path.basename(outworkspace))
 
   
 
inpath  = gp.GetParameterAsText(0)
for root, dirs, files  in os.walk(inpath):
         gp.workspace = root
              
         workspaces = gp.listworkspaces("*", "FileGDB")
         workspace = workspaces.next()
         try:
                   while workspace:
                       # Compact each geodatabase
                       gp.AddMessage("处理名字FileGDB:"+workspace)
                       outname=workspace.replace(inworkspace,"")+os.path.basename(workspace)              
                       p=outname.find(".")
                       outname=outname[0:p]+".mdb"
                       tomdb(workspace,outworkspace+os.sep+outname,gp)
                       workspace = workspaces.next()
         except Exception, ErrorDesc:
             gp.AddError(str(ErrorDesc))   
 
3.15     在不同工作空间类型之间迁移数据
 
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
mxd.replaceWorkspaces(r"C:\Project\Data", "SHAPEFILE_WORKSPACE", r"C:\Project\Data\Parcels.gdb", "FILEGDB_WORKSPACE")
mxd.replaceWorkspaces(r"C:\Project\Data\Transportation.mdb", "ACCESS_WORKSPACE", r"C:\Project\Data\Transportation.gdb", "FILEGDB_WORKSPACE")
mxd.saveACopy(r"C:\Project\Project2.mxd")
del mxd
 
3.16 综合例子
# ---------------------------------------------------------------------------
# rr.py
# Created on: 周二 十一月 02 2010 07:04:51 下午
#   (generated by ArcGIS/ModelBuilder)
# Usage: rr <表达式> <计算>
# ---------------------------------------------------------------------------
# Import system modules
import sys, string, os, arcgisscripting
#批量数据图层备份
# Create the Geoprocessor object
gp = arcgisscripting.create()
gp.AddToolbox("C:/Program Files (x86)/ArcGIS/ArcToolbox/Toolboxes/Analysis Tools.tbx")
gp.overwriteoutput = 1
def update59(DLTB,DLFH):
        rows =gp.searchcursor(DLTB,"DLBM Like '2*'")
        row = rows.Next()
        uniqueList = []
        while row:
                if row.GetValue("DLBM") not in uniqueList:
                        uniqueList.append(row.GetValue("DLBM"))
                row = rows.Next()
        dltb_Layer="dltb_Layer"
        dlfh_layer="dlfh_layer"
        for dldm in uniqueList:
                gp.MakeFeatureLayer_management(DLTB, dltb_Layer, "[DLBM] LIKE '"+dldm+"'")
                gp.MakeFeatureLayer_management(DLFH, dlfh_layer)
                gp.SelectLayerByLocation_management(dlfh_layer, "INTERSECT", dltb_Layer, "", "NEW_SELECTION")
                if (dldm==201) or  (dldm==202) or (dldm==203):
                        gp.AddMessage("删除:"+str(gp.getcount(dlfh_layer)))
                        gp.DeleteFeatures_management(dlfh_layer) #不需要地类符号                    
                       
                else:
                        result=gp.CalculateField_management(dlfh_layer, "DLBM", dldm, "VB", "")
                        gp.AddMessage("更新:"+str(result)+":"+str(gp.getcount(dlfh_layer)))
       
inworkspace = gp.GetParameterAsText(0) #分幅数据所在目录哦
layername = "DLFH" #原始名称
newlayername = "DLFH1" #新名称
for root, dirs, files  in os.walk(inworkspace):
        gp.workspace = root
        workspaces = gp.listworkspaces("*", "access")
        workspace = workspaces.next()
        while workspace:
                try:
                        gp.workspace = workspace
                        DLTB_Select=workspace+"\"+layername
                        newtablename=workspace+"\"+newlayername
                       
                        if not gp.Exists(newtablename):
                                gp.Select_analysis(DLTB_Select,newtablename,"") #备份
                                gp.AddMessage("备份:"+DLTB_Select+"为:"+newtablename)
                        gp.CalculateField_management(DLTB_Select, "DLBM", "mid([DLBM],1,3)", "VB", "")
                        #更新05-09符号
                        DLTB=workspace+"\\DLTB"
                        update59(DLTB,DLTB_Select)                      
                       
                       
                       
                except Exception, ErrorDesc:
                        gp.AddError(str(ErrorDesc))
                workspace = workspaces.next()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值