您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > python和Arcpy编程
python和arcpy编程•Python介绍•ArcPy介绍•开发实例•Pythonadd-insPython概述•Python是由荷兰人吉多范罗苏姆(GuidovanRossum)在上世纪八十年代末构想并于1991年推出的一种面向对象的脚本编程语言。•Python编程语言继承了传统编译语言的强大性和通用性,同时也借鉴了脚本和解释语言的易用性。1•目前Python已广泛应用于科学计算、网站开发、系统管理等,2011年1月,被TIOBE编程语言排行榜评为2010年年度编程语言。•Python有多个版本,集成在ArcGIS10.1中的Python版本为2.7.2。特点•Python具有如下特点:–开源的。Python完全开放源码,用户可以从问Python网站()上免费得到所有Python相关软件;通过Python开发的产品可以无限制地分发及销售。Python网站()–可移植、跨平台。Python是用可移植的ANSIC写成的,使用Python语言编写的程序可以运行在Unix、Linux、MS-Windows和其他有Python解释器的任何平台上(包括移动平台)。–可嵌入到其它应用程序中运行,如嵌入到C语言。–支持多种对象类型,有大量的库软件和第三方软件。Python内置了列表、元组、字典等对象类型,提供了很多预编码的库工具,从正则表达式到网络等。同时,因为Python是自由软件,目前有大量的第三方软件包,如ESRI公司的Arcpy等。•与其他语言比较,Python也有不足之处:–Python大部分扩展软件包是由许多企业或个人开发和维护,并没有直接集成在Python软件中,用户如要用到这些软件包,需要收集和安装。–Python是解释型语言,不是以本地机器码运行,所以运行速度比编译型语言慢。Python集成开发环境•目前有很多用于Python开发的集成开发环境。IDLE(IntegratedDeveLopmentEnvironment)是Python中自带的一个集成环境。•IDLE有两种窗口:用于交互运行的Shell窗口和用于代码编辑、调试和运行的文本编辑器窗口。文本编辑器窗口中代码的运行结果显示在Shell窗口中(包括与用户的交互)。文本编辑器窗口Shell窗口学习资源•Python文档–在IDLE中,点击F1或Help\PythonDocs,将打开Python文档。文档包括详细的教程(Tutorial)、语言参考(LanguageReference)、标准库(StandardLibrary)、常见问题的解答(PythonFrequentlyAskedQuestions)等。学习教程Python软件的发展历史•Python技术交流网站–目前有很多Python技术交流网站,如Python官方论坛()、灵蛇网Python论坛()等,这些网站提供了Python问题回答、案例分享、资料下载、教材教程等资源。Python官方论坛()灵蛇网Python论坛()•Python图书–在亚马逊网站(amazon.cn)有很多Python方面的图书。适合Python初学者使用适合有一定Python编程经验的读者使用Python数据类型•Python的基本数据类型包括:–数字型(Number)–字符串型(String)–列表型(List)–元组型(Tuple)–字典型(Dictionary)–文件型(File)•其中字符串、列表、元组、文件(以回车符作为分割)都是序列型数据。2列表•列表是对象的集合,对象的种类可以是数字、字符串甚至其他列表。•列表中的所有元素都包含在一对方括号。[element1,element2,element3,…]•Python提供了很多序列操作函数,包括返回最大最小值、排序、映射(map)、枚举(enumerate)、合并(zip)、从序列中随机选取元素等。函数解释max(iterable[,args...][,key])返回非空序列(字符串、元组或列表)的最大成员,key指定排序函数。max([5,1,23,12,56])56min(iterable[,args...][,key])返回非空序列(字符串、元组或列表)的最小成员,key指定排序函数。sorted(iterable[,cmp[,key[,reverse]]])对序列中的成员进行排序。如是反转,则reverse=Truesorted([5,1,23,12,56])[1,5,12,23,56]sorted([5,1,23,12,56],reverse=True)[56,23,12,5,1]map(function,iterable,...)对序列中的每个元素进行函数操作。map(round,[5.2,1.5,23.4,12.6,56.7])[5.0,2.0,23.0,13.0,57.0]序列操作函数(1)函数解释enumerate(sequence[,start=0])返回序列的枚举对象,包括索引号和对应值fori,seasoninenumerate(['Spring','Summer','Fall','Winter']):...printi,season0Spring1Summer2Fall3Winterzip([iterable,...])多个序列合并成一个序列,对应元素组成子序列x=[1,2,3]y=[4,5,6]zipped=zip(x,y)zipped[(1,4),(2,5),(3,6)]序列操作函数(2)deffunc(x):y=x*2+5returnyList1=[2,5,9,6]List2=map(func,List1)printList2对一个列表中的元素进行函数操作importrandomr=random.choice([a,b,c,d,e,f,g,h,i,j])printr随机选取列表中的一个元素•在for循环中,可以依次从序列中取出一个元素进行处理。List1=[2,5,9,6]List2=[]forxinList1:y=x*2+5List2.append(y)printList2input_file=open(c:\\data\\samples.txt,r)forsininput_file:prints顺序打印文件中每一行的值•用split函数对字符串进行分割,将返回一个列表。split(s,sep),sep为分割符importstringS=12,34,56,78printstring.split(S,,)字典•字典是一个由“键-值”(key-value)对组成的非排序可变集合体。在一个字典中,所有的键是不可变的,且最多只能出现一次,与之相关联的值没有限制。•创建字典的语法:d_name={key1:value1,key2:value2,key3:value3,…}•字典的特点:–字典中项的排序是随机的。–通过键而不是排序的位置来引用值。–键可以是数字、字符串甚至元组,值可以是数字、字符串、元组、列表或字典。如:d={1:123,2:ased,a:[123,345,567]}•字典基本操作:–显示某个键的值:d_name[‘key’]–添加元素或对键重新赋值:d_name[‘key’]=‘value’如果key不在字典中,则添加一条新的映射;如已在字典中,则修改key对应的value值。–删除元素:del(d_name[key])键的类型应和定义的类型一致计算落在每个栅格内的点数(如犯罪事件点)List1=[[2.3,5.4],[9.4,6.2],[1.2,9.3],[2.5,5.7],[9.2,6.5]]dict1={}foriinrange(1,11):forjinrange(1,11):dict1[i,j]=0forxinList1:row=int(x[0])col=int(x[1])dict1[row,col]=dict1[row,col]+1foriinrange(1,11):forjinrange(1,11):printdict1[%d,%d]=%d%(i,j,dict1[i,j])模块•模块(module)是指一种组织形式,它将彼此有关联的Python代码(可以包含函数和类)组织到一个文件中。同一模块往往是用途相近的代码的集合,如math模块是数学函数的集合。•模块文件的扩展名为.py,即一个Python文件被看作为一个模块,一个模块也可以被看作为一个文件。3模块的引用•在启动Python时,_builtins_模块自动载入到内存中,该模块中的函数和类可以直接引用,另外一些模块不是自动载入的,引用时需要用import语句导入到内存中,可以是导入整个模块,也可以是导入模块中的指定函数。•模块引用的方式:–引入整个模块,模块中的所有函数都能被调用,但由于会存在不同模块中有同名函数的情况,在应用时,必须在函数名前加模块名,以明确是哪个模块中的函数,如:importmathprintmath.sqrt(9)–从模块中引入指定函数,只能调用该函数,不能调用模块中其它函数,在应用时,函数名前不需要加模块名,如:–引入的模块或函数名采用别名,利用别名来调用函数,如:frommathimportsqrtprintsqrt(9)frommathimportsqrtassprints(9)•模块查找路径:–引入模块时,Python是从模块查找路径中去查找,如引入的模块不在模块查找路径中,就会出现报错信息(即没有相应名称的模块)。可以在PathBrowser窗口中查看初始化的查找路径。–如用户创建的模块不在初始化的查找路径中,可以通过sys模块的path属性改变查找路径。利用sys.path可以查看当前的查找路径。PathBrowser窗口•模块可进一步被组织成包(package)。包是一个有层次的文件目录结构,是由子包、模块及其它相关文件组成,如arcpy就是一个Python包。可以通过包名称(即文件夹名)导入包中的所有模块,也可以通过路径导入限定模块。使用包可以减少名字冲突的风险。•每个作为包使用的目录必须包含一个__init__.py以标识自己。模块的组织内部模块•内部模块是指Python软件自带的模块。标准Python库中含有几百个模块,从计算指定日期是星期几到抓取网站数据,一应俱全。完整的列表可查看。Python文档中模块列表•主要内部模块:–sys模块,sys在这里的意思是Python系统,而不是指操作系统。–os模块和os.path模块:定义了一组与目录操作相关的函数,os.path模块是os模块的一个属性,当装入os模块时就自动装入了它。–string模块:string模块的作用是操作字符串,目前,string模块里的许多函数已设计为string对象的方法。–math模块:包含大量数学函数。–random模块:用于产生不同分布的随机数,包括在某个数值范围内产生随机数、在序列中随机选择元素、在序列中随机抽样、对序列中的元素进行随机排列等。–urllib模块:用于打开及拷贝url表示的网络对象。–re模块:re(regularexpression)即正则表达式,是由字符和特殊符号组成的字符串,re模块提供了多个基于正则表达式的字符串匹配函数,用于查找、分隔以及替代等字符串操作。函数解释urlopen(url[,data])打开一个由URL表示的网络对象,也可以打开本地文件。urlretrieve(url[,filename[,reporthook]])把一个URL表示的网络对象拷贝到一个本地文件。importurlliburllib.urlretrieve(http://
本文标题:python和Arcpy编程
链接地址:https://www.777doc.com/doc-4211501 .html